小编典典

此查询注入证明吗?

sql

我正在使用PDO与我的数据库对话,我想知道是否强制转换这样的类型

$dbh->query("SELECT * FROM recipes WHERE id=".(int)$id);

足以防止sql注入?在这种情况下,$ id始终是整数。

我还想知道,如果变量是字符串,那么防止这种语句插入的好方法是什么?


阅读 139

收藏
2021-05-16

共1个答案

小编典典

是的。强制转换为int可以防止所有讨厌的SQL注入。

如果变量是字符串,则应使用准备好的语句来传递它。

$sql = 'SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql);
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
2021-05-16