php – 为什么我们需要在bindParam()中指定参数类型?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 为什么我们需要在bindParam()中指定参数类型?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有点混淆为什么我们需要指定我们在PHP中的PDO中的bind@R_679_1403@函数中传递的数据类型.例如这个查询
$calories = 150; 
$colour = 'red';
$sth = $dbh->PRepare('SELECT name,colour,calories
From fruIT
WHERE calories < ? AND colour = ?');
$sth->bindParam(1,$calories,PDO::PARAM_INT); 
$sth->bindParam(2,$colour,PDO::PARAM_STR,12);
$sth->execute();

如果我没有指定第3个参数,是否存在安全风险.我的意思是,如果我只是在bind@R_679_1403@:

$sth->bindParam(1,$calories); 
$sth->bindParam(2,$colour);
使用带有类型的bind@R_679_1403@可以被认为更安全,因为它允许更严格的验证,进一步sql注入.但是,如果您不这样做,我不会说存在真正的安全风险,因为事实上您执行的是 prepared statement防止sql注入而不是类型验证.一种更简单方法是通过简单地将数组传递给execute()函数而不是使用bind@R_679_1403@,如下所示:
$calories = 150; 
$colour = 'red';

$sth = $dbh->prepare('SELECT name,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,calories
                      FROM fruit
                      WHERE calories < ? AND colour = ?');

$sth->execute(array($calories,$colour));

脚本宝典总结

以上是脚本宝典为你收集整理的php – 为什么我们需要在bindParam()中指定参数类型?全部内容,希望文章能够帮你解决php – 为什么我们需要在bindParam()中指定参数类型?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。