دستور prepare چیست؟

این دستور کاربرد های خوبی دارد و میتواند جایگزین عملکرد های مهمی شود و سرعت بالاتری ایجاد کند.

درحقیقت دستورات آماده ای است که درصورت استفاده بیشتر از یک دستور کمک میکند.

این دستور کمک میکند که از حملات مختلف در امان باشید.

نحو اجرای دستورات آماده:

prepare میتواند دستورات SQL را به یک کوئری تبدیل کرده و مانند مثال زیر به جای مقادیر از <?> استفاده میشود.

INSERT INTO Users VALUES(?, ?, ?)

Execute در ادامه میتواند مقادیر موردنظر مارا به پارامتر ها متصل میکند و در پایگاه داده این مقادیر را اجرا میکند.کاربرد خوب این دستور این است که میتوان با همین موضوع چندین مقدار دیگر را اضافه کرد.

مزیت استفاده از Prepare

  • زمان تجزیه و تحلیل کاهش میابد زیرا دستورات از قبل آماده هستند.
  • پهنای بند را کاهش میدهد زیرا به جای اجرا چندبار از کوئری فقط پارامترها عوض میشود.
  • در برابر حملات SQL injections مقاوم است.

استفاده از Prepare

استفاده از این دستورات آماده به دو روش اجرا میشود.

  • MySQLi
  • PDO

کار با MySQLi

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

<?php
$servername = "localhost";
$name= "name";
$pass = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $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();
?>

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

تابع bind_param ()

پس از نوشتن کد بالا میتوان این تابع را استفاده میکنیم تا مقادیر را اضافه کنیم.

$stmt->bind_param("sss", $name, $hometown, $school);

کار با PDO

در مثال زیر این دستور را در روش PDO میبینیم:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // prepare sql and bind parameters
    $stmt = $conn->prepare("INSERT INTO Biograph (name, hometown, school) 
    VALUES (:name,:hometown,:school)");
    $stmt->bindParam(':firstname', $firstname);
    $stmt->bindParam(':lastname', $lastname);
    $stmt->bindParam(':email', $email);

    // insert a row
    $firstname = "John";
    $lastname = "Doe";
    $email = "john@example.com";
    $stmt->execute();

    // insert another row
   $firstname = "alireza";
$lastname = "chamani";
$email = "alireza@example.com";
$stmt->execute();

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

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

    echo "New records created successfully";
    }
catch(PDOException $e)
    {
    echo "Error: " . $e->getMessage();
    }
$conn = null;
?>

خلاصه درس

  • این دستور میتواند جایگزین عملکرد های مهمی شود
  • سرعت بالاتری ایجاد کند.
  • با استفاده از این دستور از حملات امان هستید.

توسعه دهندگان
علیرضا چمنی