سؤال

كنت أتساءل فقط ما إذا كان يحدث فرقًا إذا كنت بيانات mysql_real_escape أكثر من مرة؟

لذلك إذا نجت من البيانات في جزء واحد من موقع الويب الخاص بي ، ثم مرة أخرى في جزء آخر من التعليمات البرمجية. هل هذه ستصبح مشكله؟ أو تحدث فرقا؟

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

المحلول

نعم. ستحصل على مزيد من الخلف غير الضروري.

نصائح أخرى

المكان الصحيح لـ mysql_real_escape قبل ترسل الاستعلام لحفظ البيانات. كل مثيل آخر في أي مكان آخر في البرنامج النصي هو عيب تصميم رئيسي.

ويفضل أن يكون ذلك في فئة DB الخاصة بالطبع.

نعم ، ستكون مشكلة.

فمثلا:
إذا أ IS "Joe's House" ، ستنتج المكالمة الأولى "Joe 's House" وسيقوم الثاني بإنتاج "Joe 's House" ، مما ينقذ الانزلاق الخلفي في قاعدة البيانات.

هذا مشابه للمشكلة التي تنشأ عندما يكون لخادم الويب الخاص بـ Magic Quotes ممكّنًا وتستخدم mysql_real_escape_string على الإدخال من العميل. تم حل هذا بواسطة:

if (! get_magic_quotes_gpc()) {
    $value = mysql_real_escape_string($_GET["value"]);
} else {
    $value = mysql_real_escape_string(stripslashes($_GET["value"])); 
}

(للاطلاع على المثال الأخير انظر http://www.php.net/get_magic_quotes_gpc )

قمت بتحرير الإجابة لتعكس التصحيحات في التعليقات أدناه

بالطبع ، ستكون البيانات مزدوجة.

يجب ألا تستخدم mysql_real_escape() على الإطلاق ، الاستعلامات المعلمة عبر Mysqli كانت تلتصق لفترة طويلة بما فيه الكفاية.

نعم ، ستكون مشكلة الإفراط في التصعيد. هذا هو نفسه بالنسبة لأي هروب ، بغض النظر عن ما يفعله بالضبط. على سبيل المثال ، إذا كنت تهرب من عروض أسعار مزدوجة في السلسلة بعد القاعدة المشتركة:

bla "foo"

بعد أن يهرب واحد

bla \"foo\"

بعد أن يصبح اثنان

bla \\\"foo\\\"

وهلم جرا. يجب أن يتطابق عدد "Unescapements" تمامًا مع عدد "الهروب". يمكن أن ترى مظاهر لهذه المشكلة على بعض المواقع التي تفرط فيها بعض الشخصيات في حقول النص ، بحيث يصبح الفاصلة الفورية البسيطة هذا \' على الإخراج.

لا يمكن التمييز بين السلسلة التي هربت وسلسلة غير معروفة ، لأن الشيء الذي يبدو وكأنه سلسلة هربت كانت السلسلة غير المقيدة المقصودة. لذلك ، فإن محاولة الهروب مرة أخرى ، ستهرب من الهروب - وسيكون النص الهاربين هو ما يقرأه MySQL.

لذلك ، يجب ألا تهرب أبدًا أكثر من مرة.

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

نعم، أنه يحدث فرقا:

$string = "I'm Chuck!";
mysql_escape_string($string); // I\'m Chuck!
mysql_escape_string(mysql_escape_string($string)); // "I\\\'m Chuck!
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top