سؤال

لدي مجموعة من المتغيرات $ _post التي يتم إرسالها عبر شكل طويل وبدلا من الترميز الصعب لكل واحد مع mysql_escape_string() هل هو موافق بالنسبة لي للقيام بما يلي؟ لا أعرف إذا كان هذا هو في الواقع آمنة و / أو رمز قابلة للحياة.

foreach ($_POST as &$post_item){
    $post_item = mysql_escape_string($post_item);
}

أنا شبه مؤكد أنني لأنني أستخدم &، فإنه يمر في المرجع، وليس القيمة، لذلك أنا في الواقع تغيير القيمة في $ _Post.

أيضا، يجب أن أستخدم mysql_real_escape_string() في حين أن؟

تحرير: أنا أستخدم PDO وإعداد () جنبا إلى جنب مع الطريقة أعلاه. هل هذا يهتم به بالنسبة لي؟

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

المحلول

لماذا لا تستخدم array_map()?

array_map(mysql_real_escape_string, $_POST);

ولكن في الواقع، يجب أن تستخدم البيانات المخففة / المعدة.

mysql_real_escape_string() يأخذ تحسب حرف قاعدة البيانات الحالية في الاعتبار، mysql_escape_string() لا. وبالتالي فإن السابق هو أفضل بديل مقارنة.

تحرير (متابعة تحرير OP إلى السؤال):

نظرا لأنك تقوم بالفعل ببيانات PDO، فلا حاجة لتعديل قيمك. تعتني شركة PDD بكل شيء، فهذا هو نقطة كل واحدة منه (إذا قمت حقا بوضع جميع البيانات في المعلمات، وهذا هو - فقط سلاسل سلاسل لبناء بيانات SQL تؤدي إلى كارثة مع شركة تنمية نفط عمان أو بدون). الهروب من القيم مسبقا سيؤدي إلى قيم هرب في قاعدة البيانات.

نصائح أخرى

نعم، يجب أن تستخدم mysql_real_escape_string(), ، إذا كنت ستذهب إلى هذا الطريق. ولكن الطريقة الصحيحة للتأكد من أن المتغيرات آمنة لإرسالها إلى قاعدة البيانات تستخدم استفسارات معلمة والتي يتم توفيرها في PHP من خلال أي mysqli. وظائف أو نفايات.

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

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