17

我有以下代码:

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 或者我可以吗?

4

3 回答 3

30

不,当您使用准备好的语句时,您不必自己逃避值(即不,您不需要调用mysqli_real_escape_string:数据库引擎会自己做。

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


作为旁注:您的值作为整数传递'ii'mysql_real_escape_string.

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

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

于 2010-02-17T20:55:32.483 回答
1

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

于 2010-02-17T20:57:11.347 回答
0
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();    
 }    
}   
于 2010-03-25T01:39:02.323 回答