MySQL Real Escape String String متغيرات متعددة
-
12-09-2019 - |
سؤال
قل إنني أرغب في إدراجها في الاسم والعنوان والمدينة والولاية والقيم البريدي $ اسم $ العنوان $ etc .....
كيف يمكنني تشغيل mysql_real_escape_string
على كل من المتغيرات قبل إدراج. يجب أن يكون هناك حلقة أو حلقة أو أثناء كتابة كل متغير أليس كذلك؟
شكرا للمساعدة.
توم
لذلك إذا كان لدي
$data = array($address, $city, $name);
array_map('mysql_real_escape_string', $data);
و
$columns = "name, address, city, state, zip";
$count = $dbh->exec("INSERT INTO customer($columns) VALUES ($data)");
أحصل على الكثير من الأخطاء.
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'root'@'localhost' (using password: NO) in /Users/tommyscott45/Sites/experiment/result.php on line 23
ماذا الآن؟
المحلول
حدث خطأ في قاعدة البيانات عند محاولة الاحتجاج mysql_real_escape_string
وأرى أنك تستخدم $dbh->exec()
لتنفيذ الاستعلام. هذا يقترح أنك تتصل بقاعدة البيانات باستخدام PDO، لذلك يجب عليك استخدامها PDO::quote
بدلا من mysql_real_escape_string
.
علاوة على ذلك، كما ذكر آخرون بالفعل، سيكون هناك طريقة أفضل لحل مشكلتك هي استخدام البيانات المعدة و PDO::prepare
.
نصائح أخرى
كنت تستخدم sprinthf.
علي سبيل المثال
$query = sprintf("INSERT into
TABLE name = '%s', address = '%s', city = '%s'",
mysqli_escape_string($link, $name),
mysqli_escape_string($link, $address),
mysqli_escape_string($link, $city) );
أو هو أنه ليس بالضبط ما كنت تبحث عنه؛ طريقة لتجنب كتابة "mysqli_escape_string" مرارا وتكرارا.
لديك العديد من المشاكل.
أولا هو أنك تحتاج إلى تعيين إخراج array_map()
إلى متغير لأنه لا يقوم بالتحويل في المكان. ثم تحتاج إلى تنفذه مرة أخرى إلى سلسلة.
$data = "'".implode("', '", array_map('mysql_real_escape_string', $data))."'";
المشكلة الأكبر هي أنك تقوم بتجميع تدميم SQL بدلا من استخدام طبقة وصول إلى البيانات والتي ستأخذ المعلومات التي تريد حفظها واستخدام معرفتها حول المكان الذي تريد تخزينه لتجميع عبارة SQL الصحيحة، مع نقلا عن نقلا عن ذلك وكل.
هذا هو أيضا الدافع وراء الاقتراحات لاستخدام البيانات المعدة، بالمناسبة، ولكن فقط استخدام البيانات المعدة هو نصف الحل فقط لأنك ستظل تجميع بيانات SQL.