我正在使用PDO与我的数据库对话,我想知道是否强制转换这样的类型
$dbh->query("SELECT * FROM recipes WHERE id=".(int)$id);
足以防止sql注入?在这种情况下,$ id始终是整数。
我还想知道,如果变量是字符串,那么防止这种语句插入的好方法是什么?
是的。强制转换为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();