سؤال

لدي الرمز التالي:

function dbPublish($status)
{
 global $dbcon, $dbtable;

 if(isset($_GET['itemId']))
 {
  $sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?';
  $stmt = $dbcon->prepare($sqlQuery);
  $stmt->bind_param('ii', $status, $_GET['itemId']);
  $stmt->execute();
  $stmt->close();
 }
}

هل أحتاج إلى mysql_real_escape_string في هذه الحالة أم أنا بخير؟

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

المحلول

لا ، ليس عليك الهروب من القيمة بنفسك (أي لا لا تحتاج إلى الاتصال mysqli_real_escape_string), ، عندما تستخدم عبارات معدّة: سيفعل محرك DB ذلك بنفسك.

(في الواقع ، إذا كنت تتصل mysql_real_escape_string واستخدام المعلمات المربوطة ، ستنتسب سلاسلك مرتين - وهو ما لن يكون رائعًا: سينتهي بك الأمر إلى هروب الشخصيات في كل مكان ...)


باعتبارها جانبًا جانبيًا: يتم تمرير قيمك كمناسبات صحيحة (كما هو موضح من قبل 'ii'), ، لذلك لن تضطر إلى الاتصال mysql_real_escape_string, ، حتى لو لم تكن تستخدم عبارات معدّة: كما يشير اسمها ، يتم استخدام هذه الوظيفة للهروب ... السلاسل.

للأعداد الصحيحة ، أنا فقط أستخدم فقط intval للتأكد من أن البيانات التي حققتها في استعلامات SQL الخاصة بي هي بالفعل أعداد صحيحة.

(ولكن ، بما أنك تستخدم استفسارات معدة ، مرة أخرى ، لا يتعين عليك القيام بهذا النوع من الهروب من نفسك)

نصائح أخرى

لا ، يجب ألا. إن الجمع بين الاثنين سيؤدي إلى ظهور أحرف الهروب المرئية في بياناتك.

function dbPublish($status)    
{    
 global $dbcon, $dbtable;    

 if(isset($_GET['itemId']))    
 {    
  $sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?';    
  $stmt = $dbcon->prepare($sqlQuery);    
  $stmt->bind_param('ii', $status, $_GET['itemId']);    
  $stmt->execute();    
  $stmt->close();    
 }    
}   
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top