هل يجب علي استخدام mysql_real_escape_string إذا قمت بربط المعلمات؟
-
21-09-2019 - |
سؤال
لدي الرمز التالي:
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();
}
}