PDA

View Full Version : سوال: تابع mysql_real_escape_string



masoud_tamizy
چهارشنبه 26 بهمن 1390, 17:03 عصر
با سلام خدمت دوستان عزیز
من درهنگام استفاده از تابع



mysql_real_escape_string($theValue)


با خطای زیر روبرو شدم . لطفا راهنمایی کنید ؟

<br /> <b>Warning</b>: mysql_real_escape_string() [<a href='function.mysql-real-escape-string'>function.mysql-real-escape-string</a>]: Access denied for user 'SYSTEM'@'localhost' (using password: NO) in <b>C:\wamp\www\Banking\PHP\SQL.php</b> on line <b>82</b><br /> <br /> <b>Warning</b>: mysql_real_escape_string() [<a href='function.mysql-real-escape-string'>function.mysql-real-escape-string</a>]: A link to the server could not be established in <b>C:\wamp\www\Banking\PHP\SQL.php</b> on line <b>82</b><br />

امیـرحسین
چهارشنبه 26 بهمن 1390, 17:26 عصر
اتصال به دیتابیس و بعدش دسترسی User ای که باهاش وصل میشید رو چک کنید

masoud_tamizy
چهارشنبه 26 بهمن 1390, 17:32 عصر
همه چی درسته و بدون استفاده از اون جواب می ده .
درواقع این تابع escape_string داخل یه تابع دیگست که خودم برای چک کردن مقادیر ورودی نوشتم :




function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = ""){
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : addslashes($theValue);
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . trim($theValue) . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}

asonline
چهارشنبه 26 بهمن 1390, 18:07 عصر
پیشنهاد می کنم از debugger استفاده کن

Reza1607
چهارشنبه 26 بهمن 1390, 18:17 عصر
خوب شايد شما به لينك ديتابيس دسترسي ندارين

امیـرحسین
چهارشنبه 26 بهمن 1390, 19:22 عصر
همه چی درسته و بدون استفاده از اون جواب می ده .
درواقع این تابع escape_string داخل یه تابع دیگست که خودم برای چک کردن مقادیر ورودی نوشتم :




function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = ""){
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : addslashes($theValue);
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . trim($theValue) . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}


در مورد Switch در تابعتون نظرم رو میگم شاید علاقمند باشید،
من اگر بجای عدد، string بفرستم، MySQL توی ستون عددی چیزی پیدا نمیکنه و اگر این string رو از فیلتر intval رد کنم صفر فرستاده میشه و همون اتفاق میافته ولی با یکم درصد خطا (مقدار صفر شاید وجود داشته باشه و انتخاب شه!)
همچنین این تابع تو خیلی از حالات خطای MySQL میده چون همه‌ی مقادیر خالی داره NULL رد میشه این یعنی همیشه همه‌ی فیلدها باید NULL بپذیرند. در case مربوط به int ، صفر هم NULL رد میشه!!! چون صفر == "" همیشه TRUE هست!

به نظر من بهتره خیلی ساده فقط escape کنید و مقادیر رو داخل کوتیشن بذارید (مثل PDO::quote) اینجوری قابلیت حمل تابع بالاتر هم میره....

masoud_tamizy
چهارشنبه 26 بهمن 1390, 21:50 عصر
خوب شايد شما به لينك ديتابيس دسترسي ندارين
اینکه به لینک پایگاه داده دسترسی ندارم رو متوجه نشدم ! لطفا بیشتر توضیح بدید آقارضا
درضمن کانکشن قبل از اجرای دستور ساخته می شه .
خوب این تابعی که من نوشتم () خودش توی یک کلاس تعریف شده که توی سازنده کلاس از دستور زیر برای اتصال به mysql استفاده کردم :

@$this->mysqli->real_connect($host,$user,$pass,$db,$port);

زمانیکه تابع mysql_real_escape_string رو از توی تابع حذف می کنم همه چیز درست کار می کنه .

masoud_tamizy
چهارشنبه 26 بهمن 1390, 21:54 عصر
پیشنهاد می کنم از debugger استفاده کن
از چه دیباگری ؟
چون براساس آژاکس داره کار می کنه ، دارم واسه دیباگ از فایرباگ یا خود مرورگر گوگل کروم استفاده می کنم ، این خطا رو هم فرقی نمی کنه که تابع mysql_real_escape_string رو تنها بنویسی یا توی یه تابع دیگه ... کلا خطا از همین تابعه .

masoud_tamizy
پنج شنبه 27 بهمن 1390, 09:27 صبح
لطفا اگه کسی می دونه راهنمایی کنه . من هنوز جواب سوالم رو نگرفتم !!!

masoud_tamizy
پنج شنبه 27 بهمن 1390, 10:36 صبح
درنهایت این کار رو انجام دادم تا که جواب بده ...

$link=mysql_connect("127.0.0.1","root","");
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue,$link) : mysql_escape_string($theValue);