stmt_init
تابع stmt_init یک «استیتمنت آماده» (Prepared Statement) می سازد. یعنی ظرف خالی پرس وجو را می سازد تا بعداً با prepare پر شود. مثل وقتی برگه امتحان می گیری و بعداً جواب ها را می نویسی.
تعریف ساده استیتمنت آماده
طبق منبع، stmt_init() شی استیتمنت می دهد تا برای mysqli_stmt_prepare() استفاده شود. این شی بعداً پارامتر می گیرد و اجرا می شود.
نحو (Syntax)
شیءگرا: $mysqli->stmt_init(). رویه ای: mysqli_stmt_init(connection). «اتصال (Connection)» یعنی لینک برنامه به دیتابیس.
نمونه کد شیءگرا با استیتمنت آماده
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "my_db");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
exit();
}
$city = "Sandnes";
$stmt = $mysqli->stmt_init();
if ($stmt->prepare("SELECT District FROM City WHERE Name=?")) {
$stmt->bind_param("s", $city);
$stmt->execute();
$stmt->bind_result($district);
$stmt->fetch();
printf("%s is in district %s", $city, $district);
$stmt->close();
}
$mysqli->close();
?>
نمونه کد رویه ای با استیتمنت آماده
<?php
$con = mysqli_connect("localhost", "my_user", "my_password", "my_db");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
exit;
}
$city = "Sandnes";
$stmt = mysqli_stmt_init($con);
if (mysqli_stmt_prepare($stmt, "SELECT District FROM City WHERE Name=?")) {
mysqli_stmt_bind_param($stmt, "s", $city);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $district);
mysqli_stmt_fetch($stmt);
printf("%s is in district %s", $city, $district);
mysqli_stmt_close($stmt);
}
mysqli_close($con);
?>
گام های عملی با استیتمنت آماده
- اتصال بساز و خطا را چک کن.
- stmt_init را صدا بزن و استیتمنت آماده بگیر.
- با prepare کوئری را آماده کن.
- با bind_param مقدارها را بده.
- با execute اجرا کن و نتیجه را بخوان.
- در پایان، استیتمنت و اتصال را ببند.
نکته: استیتمنت آماده جلوی تزریق SQL را می گیرد؛ چون پارامترها جدا هستند.
هشدار: اگر prepare شکست خورد، پیام خطا را چاپ کن و منابع را ببند.
جمع بندی سریع
- stmt_init ظرف استیتمنت آماده می سازد.
- بعداً
prepare،bind_paramوexecuteرا انجام بده. - استفاده از استیتمنت آماده امن تر است.
- همیشه در پایان ببند و لاگ کن.