بیانیه های آماده شده در MySQLi(Prepared Statements in MySQLi)

مثال زیر از عبارات آماده شده و پارامترهای محدود در MySQLi استفاده می کند:



مثال (MySQLi with Prepared Statements)



<?php
$serve
ame = "localhost";
$use
ame = "use
ame";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($serve
ame, $use
ame, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);

}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();

$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();


$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";

$stmt->execute();

echo "New records created successfully";

$stmt->close();

$conn->close();
?>




خطوط کد برای توضیح از مثال بالا:




"INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"


در SQL خود، یک علامت سوال (؟) وارد می کنیم که در آن می خواهیم یک عدد صحیح، رشته، دو یا حباب را جایگزین کنیم.
مقدار.


سپس، به تابع bind_param() نگاهی بیندازید:





$stmt->bind_param("sss", $firstname, $lastname, $email);


این تابع پارامترها را به پرس و جوی SQL متصل می کند و به آن می گوید
پایگاه داده چه پارامترهایی هستند. آرگومان "sss" لیستی از
انواع داده هایی که پارامترها هستند. کاراکتر s به mysql می گوید که این پارامتر یک رشته است.


آگومان ممکن است یکی از چهار نوع باشد:



  • i - عدد صحیح

  • d - دو برابر

  • s -
    رشته

  • b - BLOB


برای هر پارامتر باید یکی از اینها را داشته باشیم.


با گفتن به mysql چه نوع داده ای را باید انتظار داشت، خطر تزریق SQL را به حداقل می رساند.




توجه: اگر می‌خواهیم داده‌ای را از منابع خارجی وارد کنیم
(مانند ورودی کاربر)، بسیار مهم است که داده ها پاکسازی و تأیید شوند.