使用带有类型的bindParam()可以被认为更安全,因为它允许更严格的验证,进一步防止SQL注入.但是,如果您不这样做,我不会说存在真正的安全风险,因为事实上您执行的是
prepared statement防止SQL注入而不是类型验证.一种更简单的方法是通过简单地将数组传递给execute()函数而不是使用bindParam(),如下所示:
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->execute(array(
'calories' => $calories,
'colour' => $colour
));
您没有义务使用字典,您也可以像使用问号一样进行,然后将其放在数组中的相同顺序中.然而,即使这完全有效,我也建议养成使用第一个习惯的习惯,因为一旦达到一定数量的参数,这种方法就会变得混乱.为了完成,这是它的样子:
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array($calories, $colour));