دستورهای آماده (Prepare Statements) در MySQL
دستورهای آماده (Prepared Statements) در MySQL یکی از ویژگیهای مهم برای بهبود امنیت و کارایی در اجرای دستورات هستند.
این ویژگی به شما امکان میدهد که یک دستور SQL را از قبل تعریف کرده و سپس آن را با پارامترهای مختلف اجرا کنید.
با استفاده از دستورات آماده، میتوان خطر حملات SQL Injection را کاهش داد.
نحو اجرای دستورات آماده در MySQL
برای افزودن سطر جدید در جئول از روش دستورات آماده، باید به جای column علامت ? بگذاریم.
برای مثال ذر جدول users که تنها دو ستون نام و تلفن دارد از این دستور استفاده می کنیم و دستورات آماده را اجرا می کنیم.
PREPARE stmt FROM 'INSERT INTO users (name, phone) VALUES (?, ?)';
در ادامه برای جایگذاری مقدار جدید به جای ? از دستور SET به شکل زیر استفاده می کنیم.
SET @name = 'Alireza';
SET @phone = '09123456789';
سپس با دستور EXECUTE دستورSQL را اجرا می کنیم.
EXECUTE stmt USING @name, @phone;
در آخر اجرای دستورات آماده را می بندیم.
DEALLOCATE PREPARE stmt;
دستورات آماده از روش mysqli در MySQL
یکی از روش های استفاده از دستورات آماده در برنامه، روش mysqli است که با یک مثال این روش را بررسی می کنیم.
پس از اتصال به پایگاه داده متغیر stmt را ایجاد می کنیم و دستور SQL را در آن با دستور prepare ذخیره می کنیم.
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
از طریق متد ()bind_param نوع داده قابل دخیره در ستون ها را به ترتیب می نویسیم.
در این مثال ss به معنای این است که هردو داده از نوع رشته (string) هستند.
$stmt->bind_param("ss", $name, $email);
در ادامه به متغیرهای نام و ایمیل مقدار جدید را می دهیم.
در آخر با متد ()execute دستورات را اجرا می کنیم.
$name = "Alireza";
$email = "Alireza@email.com";
$stmt->execute();
در انتهای برنامه دستورات آماده و اتصال به پایگاه داده را می بندیم.
$stmt->close();
$conn->close();
دستورات آماده از روش PDO در MySQL
یکی از روش های استفاده از دستورات آماده در برنامه، روش PDO است که با یک مثال این روش را بررسی می کنیم.
پس از اتصال به پایگاه داده، در بخش try از کد ها دستور SQL را در متغیر stmt با دستورات آماده ذخیره می کنیم.
$stmt = $conn->prepare("INSERT INTO users (name, email)
VALUES (:name,:email)");
در ادامه با متد ()bind_param متغیرهای هر ستون را ایجاد می کنیم.
$stmt->bindParam(':name', name);
$stmt->bindParam(':email', $email);
سپس متغیرهای ایجاد شده را مقداردهی می کنیم و با متد ()execute اجرا می کنیم.
$name = "Alireza";
$email = "Alireza@email.com";
$stmt->execute();
در آخر در بلوک catch اگر خطایی بود، دریافت کرده و نمایش می دهیم.
catch(PDOException $e)
{
echo "خطا : " . $e->getMessage();
}
$conn = null;
خلاصه درس
در این درس با دستورات آماده آشنا شدید.