一尘不染

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

mysql

我有以下代码:

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还是可以吗?


阅读 195

收藏
2020-05-17

共1个答案

一尘不染

不,在使用准备好的语句时,您不必自己逃避价值 (即,您不需要调用mysqli_real_escape_string:DB引擎将自己执行该操作。

(实际上,如果您正在调用mysql_real_escape_string并使用绑定参数,则您的字符串将被转义两次-
并不是很好:您最终会到处转义字符…)

附带说明:您的值以整数形式传递
(如所示'ii',因此mysql_real_escape_string即使您未使用准备好的语句,也不必调用:顾名思义,此函数用于转义…字符串。

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

(但是,当您使用准备好的查询时,您不必再进行这种转义)

2020-05-17