如果绑定参数,是否必须使用mysql_real_escape_string?

我有以下代码:

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还是没事?


答案 1

不,您不必自己转义值(即,您不需要调用mysqli_real_escape_string,当您使用预准备语句时:DB引擎将自己执行此操作。

(实际上,如果你调用mysql_real_escape_string并使用绑定参数,你的字符串会被转义两次 - 这不是很好:你最终会在任何地方转义字符......)


作为旁注:您的值以整数形式传递(如'ii'所示),因此即使您没有使用预准备语句,也不必调用,顾名思义,此函数用于转义...字符串。mysql_real_escape_string

对于整数,我通常只使用intval来确保我注入到SQL查询中的数据确实是整数。

(但是,当您使用准备好的查询时,您再次不必自己进行这种逃避)


答案 2

不,你不能。将两者结合起来将导致数据中出现可见的转义字符。


推荐