我有以下代码:

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的,当你使用预处理语句:数据库引擎将做到这一点本身<。 / p>

(其实,如果你分别致电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();    
 }    
}   
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top