آموزش mysqli prepare برای query ها
یکی از مباحثی که در طراحی سایت و php باید توجه لازم را به آن داشت، بحث روش کد نویسی برای جلوگیری از sql injection می باشد. sql injection یک نوع از حملات است که با تزریق دیتا به داده ها امکان تغییر دیتابیس وجود دارد.در صورتی که شما از mysqli استفاده می کنید یکی از روش های بسیار موثر mysqli prepare می باشد. در ادامه به توضیح این مورد خواهیم پرداخت. با ایران وبر همراه باشید.
برای شروع بهتر است یک نمونه کد mysqli prepare رو با هم ببینیم:
<?php
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die(“Connection failed: ” . $conn->connect_error);
}
$stmt = $conn->prepare(“INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)”);
$stmt->bind_param(“sss”, $firstname, $lastname, $email);
$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();
?>
کد بالا نمونه کدی است که برای یک mysqli prepare استفاده می شود. خب بهتر است جز به جز کد را با هم بررسی کنیم تا بخش های ان را بیشتر درک کنیم:
بخش اول – اتصال mysqli به پایگاه داده
$servername = “localhost”;
$username = “username”;
$password = “password”;
$dbname = “myDB”;
$conn = new mysqli($servername, $username, $password, $dbname);
در کد بالا ابتدا به پایگاه داده متصل می شویم. این کد نیاز به توضیح خاصی ندارد چون در این مقاله به بحث پیشرفته ی mysqli prepare می پردازیم بنابراین شما پایه های mysqli رو کانکت شدن به دیتابیس را به خوبی می دانید.
بخش دوم – بخش mysqli prepare
$stmt = $conn->prepare(“INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)”);
$stmt->bind_param(“sss”, $firstname, $lastname, $email);
در متن بالا بدنه ی اصلی mysqli prepare را مشاهده می کنید. در این بدنه ابتدا $conn->prepare نوشته شده که بخش اصلی prepare را می سازد. خب برای درک این عبارت حتما نیاز به تسلط به sqlمی باشد. در عبارت اول ، به جای مقدار دادن به هر یکی از ستون ها ی پایگاه داد علامت سوال قرار داده شده است.
در بخش دوم یا بخش bind_param از دو قسم تشکیل شده است، قسمت اول که با sss نشان داده شده و بقیه قسمت ها که ورودی های prepare می باشند.
حال شاید برای شما سوال پیش آمده باشد که sss چیست؟
- i – integer – عدد صحیح
- d – double – عدد اعشاری
- s – string – رشته
- b – BLOB
خب در حال حاضر شاید سوال کمی برطرف شده باشد و به نتیجه رسیده باشید. این سه sss نشانگر ورودی است و نوع سه ورودی بعدی را مشخص کرده است.
با توجه به دستور عمل بالا سه اس به معنای سه رشته می باشد. این یکی از مزیت هایی است که باعث می شود prepare از حمله sql injection به خوبی محافظت کند.
بخش سوم – مقدار دهی و اجرای دستور
$firstname = “John”;
$lastname = “Doe”;
$email = “john@example.com”;
$stmt->execute();
در این بخش سه مقدار موجود در تابع prepare را مقدار دهی می کنیم و سپس با دستور execute() اجرا می کنیم.
در این مقاله تلاش شد تا به صورت کامل پایه ی mysqli prepare موارد مختلف توضیح داده شود. اما توجه داشته باشید که باشید که برای تسلط بیشتر نیاز به کار بیشتر دارید و همچنین کد هایی برای update، insert و همچنین دریافت اطلاعات از prepare می باشد که در مقالات آینده توضیح خواهیم داد.
دیدگاه ها