Bab*_*bak 17 php mysql sql 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['itemId']);
$stmt->execute();
$stmt->close();
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下我需要mysql_real_escape_string还是我还好吗?
Pas*_*TIN 27
不,当你使用预准备语句时,你不必自己逃避价值(即你不需要打电话mysqli_real_escape_string):数据库引擎会自己做.
(实际上,如果你正在调用mysql_real_escape_string并使用绑定参数,你的字符串将被转义两次 - 这不会很好:你最终会到处逃避字符......)
作为旁注:您的值作为整数传递(如图所示'ii'),因此您不必调用mysql_real_escape_string,即使您没有使用预准备语句:正如其名称所示,此函数用于转义...字符串.
对于整数,我通常只是intval用来确保我注入SQL查询的数据确实是整数.
(但是,当您使用准备好的查询时,再一次,您不必自己进行那种逃避)