PDA

View Full Version : سوال: مشکل در استفاده از تابع mysqli_real_escape_string



atpf67
دوشنبه 20 مهر 1394, 20:09 عصر
دوستان من هر استرینگی رو به این تابع میدم NULL برمی گردونه بهم... نمیدونم مشکل از کجاست؟ ممنون میشم راهنمایی کنید.

من به صورت زیر استفاده می کنم:


public static function prepareToQuery($var){
if(Tools::isInt($var)){
return $var;
} else {
return "'". mysqli_real_escape_string($var)."'";
}
}

atpf67
سه شنبه 21 مهر 1394, 01:00 صبح
مشکل به لطف خدا حل شد؛ روش و دلیل خطا رو اینجا میگم شاید دوست دیگه ای نیاز داشتن.

این متد (mysqli_real_escape_string) برای اجرا نیاز به یک کانکشن از mysqli داره، در واقع اشتباه من این بود که کانکشن رو ایجاد نمیکردم این متد رو فراخوانی میکردم، من به صورت زیر کدمو اصلاح کردم و درست شد:


public static function prepareToDBQuery( $var){
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if(Tools::isInt($var)){
return $var;
} else {
return "'". $mysqli->real_escape_string($var)."'";
}
}



پیروز باشید- یا علی

hamedarian2009
سه شنبه 21 مهر 1394, 08:43 صبح
بهتره به جای استفاده از تابع بالا از prepared statements و bind_param استفاده کنید

atpf67
سه شنبه 21 مهر 1394, 13:37 عصر
بهتره به جای استفاده از تابع بالا از prepared statements و bind_param استفاده کنید

ممنونم بزرگوار میشه با سمپل توضیح بدین؟ و اینکه دلیل برتری این روش رو بیان کنید که من هم متوجه بشم؟ آخه من تو پی اچ پی تازه کارم!
سپاسگزارم

dddd10
سه شنبه 21 مهر 1394, 14:23 عصر
سلام
دوستان برای اولین بار از mysql_real_escape_string استفاده کردم. خواستم ببینم وقتی کاراکترهارو میخواد فیلتر کنه چه اتفاقی میوفته و خروجی چه شکلی میشه! اما خروجی بدون این تابع و با همین تابع عینا یکی هست! کسی توضیح میده روش کارش چجوره ؟

'@1test/\@!-_=#$%
\'@1test/\\@!-_=#$%

atpf67
سه شنبه 21 مهر 1394, 14:47 عصر
سلام
دوستان برای اولین بار از mysql_real_escape_string استفاده کردم. خواستم ببینم وقتی کاراکترهارو میخواد فیلتر کنه چه اتفاقی میوفته و خروجی چه شکلی میشه! اما خروجی بدون این تابع و با همین تابع عینا یکی هست! کسی توضیح میده روش کارش چجوره ؟

به این صورت تست کنید متوجه میشین:

echo $mysqli->real_escape_string("'");

ضمن این که داده ی نهایی که توی دیتابیس ثبت میشه همون داده ی اصلی هست.

به این آدرس ها هم ی سری بزنید:

http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php

این یکی واضح تر توضیح داده:
http://www.w3schools.com/php/func_mysqli_real_escape_string.asp