متد quote جایگزین تابع mysql_real_escape_string
با استفاده از این متد میتوانید در برابر حملات sql injection برنامه خود را محافظت کنید
دقت داشته باشید قبل از اجرای این کد باید charset را ست کنید
برای utf-8 کد زیر را به کار ببرید
کد PHP:
$db->exec("SET NAMES utf8");
خوب 2 ارگومان تابع دارد
ارگومان اول متغیر ما هست
ارگومان دوم که اختیاری هست نوع متغیر رو بیان میکند برای مثال PDO::PARAM_STR یا PDO::PARAM_INT یا PDO::PARAM_NULL
به توصیه PHP هم دقت کنید
همانطور که ذکر کرده استفاده ازین تابع توصیه نمیشود و سرعت کمتری دارند، به جای اون استفاده از prepare پیشنهاد شده که در اینده اموزش داده خواهد شدyou are strongly recommended to use PDO::prepare() to prepare SQL statement
هشدار: این تابع برای تمام نوع متغیر ها quotes ( علامت ' ) را در 2 طرف متغیر قرار میدهد و نیاز به قرار دادن ان در کوئری نیست !
مثال :کد PHP:
$unsafe = "I'm Ali!"; //متغیر مورد نظر
$safe = $db->quote($unsafe); //مقدار خروجی : 'I''m Ali!'
اجرای کوئری Query با PDO
خوب قسمت اصلی دیتابیس مسلما اجرای دستورات هست
3 متد برای اینکار در PDO موجود هست که به توضیح 2 متد در اینجا اکتفا میکنم
1-متد exec
این متد دستورات شما رو اجرا میکند و تعداد ردیف تحت تاثیر را برمیگرداند ( برای UPDATE , DELETE و CREATE )
هشدار: این متد برای دستورات SELECT به هیچ وجه کاربرد ندارد
هشدار2: این تابع در صورت مواجه با خطا مقدار FALSE را برمیگرداند، برای مقایسه برای جلوگیری از اشتباه شدن مقدار FALSE با 0 باید از ==! استفاده کنید به مثال توجه کنید
کد PHP:
if($db->exec($query) === false ) // درست
echo 'خطا رخ داد';
if($db->exec($query) == false ) // نادرست
echo 'خطا رخ داد';
if(! $db->exec($query) ) //نادرست
echo 'خطا رخ داد';
2-متد query
در صورتی که مایل به اجرای دستورات SELECT هستید ( برای بقیه دستورات هم میتوانید از این متد استفاده کنید ) این متد کاربرد دارد
دقت کنید خروجی این متد یک شئ دیگر هست به نام PDOStatement
و برای پردازش اطلاعات باید اموزش این شی که در اینده مطرح خواهد شد را بخوانید
یک دستور ساده
کد PHP:
$query = "SELECT * FROM `users`";
$result = $db->query($query);
//$result یک شئ از نوع دیگر است
print_r($result->fetchAll());
در مورد متد fetchAll بعدا صحبت خواهد شد فعلا بدانید این متد تمام ردیف ها را برمیگرداند و متد fetch یک ردیف را
3-متد prepare
کار با این متد همانند متد قبلی هست ولی تفاوت هایی دارند که بعدا ذکر خواهد شد
خروجی این متد یک شئ دیگر هست به نام PDOStatement
فعلا بدانید مثال بالا را با prepare میتوان به این شکل اجرا کرد
کد PHP:
$query = "SELECT * FROM `users`";
$result = $db->prepare($query);
$result->execute(); // این خط اضافه شده است
print_r($result->fetchAll());