سؤال

لدي نظام تسجيل يطلب اسم المستخدمين. بعض الأشخاص لديهم علامة اقتصادية في لقبهم ويمنع كتابة البيانات إلى جدول قاعدة بيانات MySQL (على سبيل المثال).

أنا أستخدم mysql_real_escape_string الذي يقوم بإزالة الفاصلة من السلسلة. سيكون هذا على ما يرام إلا أنني بحاجة إلى استخدام القيمة مع الفاصلة الافتتاحية مقابل خدمة ويب ، وإلا فإن خدمة الويب ستعود خاطئة.

كنت أفكر في أنه يمكنني القيام بالاسم مع خدمة الويب قبل استخدام mysql_real_escape_string ، لكن هل يمكن أن يقدم هذا عيبًا أمانًا؟ أو هل تقوم خدمات الويب الصابون بالفعل بإجراء فحوصاتها الخاصة للمدخلات النظيفة؟

أم أن هناك طريقة أفضل للمرور عبر المتغير الذي يحتفظ فيه PHP بالقيام بعملية ، ولكنه لا يزال يحافظ عليه آمنًا ويمكن لـ MySQL قبوله؟

هل كانت مفيدة؟

المحلول

يجب أن تظهر لنا بعض الرموز ، لأن mysql_real_escape_string لن يزيل علامة اقتصادية ، ولكن فقط الهروب منها.
هروب الوسائل O'Hare سيصبح O\'Hare بحيث يمكن إدراجها كسلسلة: 'O\'Hare'. عند الاسترجاع من قاعدة البيانات ، يجب أن تكون قيمتك هي الأصل O'Hare.

لذلك ، إذا فقدت الفاصلة الافتتاحية على الأرجح ، فمن المحتمل أن يكون هناك خطأ آخر في منطق البرنامج.

الخيار الآخر هو التبديل من استخدام مكتبة MySQL إلى مكتبة MySQLI أو PDO للوصول إلى قاعدة البيانات الخاصة بك. آخر اثنين دعم البيانات المعدة. يُعتقد عمومًا عبارات معدّة على أنها أفضل ممارسة للاستعلام عن قاعدة البيانات الخاصة بك.

نصائح أخرى

mysql_real_escape_string() لن يزيل العوائق.

من المحتمل أن تكون مشكلتك على جانب الإخراج ، أو بعض الوظائف الأخرى التي تعبث مع الإدخال.

تحتاج إلى فتح اتصال قاعدة بيانات قبل استخدامك mysql_real_escape_string أو سوف يعطل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top