Php 如果绑定参数,是否必须使用mysql\u real\u escape\u字符串?

Php 如果绑定参数,是否必须使用mysql\u real\u escape\u字符串?,php,sql,mysql,sql-injection,mysql-real-escape-string,Php,Sql,Mysql,Sql Injection,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[

我有以下代码:

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\u real\u escape\u string吗?或者我还好吗?

不,当您使用准备好的语句时,您不需要自己转义值(即,不需要调用
mysqli\u real\u escape\u string
),DB引擎将自行完成

(事实上,如果调用
mysql\u real\u escape\u string
并使用绑定参数,字符串将被转义两次——这不太好:最终会到处转义字符……)


附带说明:您的值是以整数形式传递的(如
'ii'
所示),因此您不必调用
mysql\u real\u escape\u string
,即使您没有使用准备好的语句:正如其名称所示,此函数用于转义。。。字符串

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


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

不,您不能这样做。将两者结合起来将产生
在数据中显示的可见转义字符中。

注意,只有参数不受SQL注入的影响;如果其值来自用户输入,则直接插入查询字符串(如
$dbtable
)的任何变量都是潜在向量。当然,像表名和列名这样的东西永远不应该直接来自用户输入。
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();    
 }    
}