Php PDO:What';绑定时使用数据类型的目的是什么?

Php PDO:What';绑定时使用数据类型的目的是什么?,php,mysql,pdo,Php,Mysql,Pdo,可能重复: 例如,假设我准备了以下声明: $sth = $dbh->prepare('SELECT `name` FROM `user` WHERE `user_id` = :user_id'); 我可以这样绑定user_id参数: $sth->bindValue(':user_id', $user_id_value); 我仍然可以避免SQL注入 但是,bindValue()还是一个名为data_type的可选参数,它允许您设置显式数据类型。例如: $sth->bindV

可能重复:

例如,假设我准备了以下声明:

$sth = $dbh->prepare('SELECT `name` FROM `user` WHERE `user_id` = :user_id');
我可以这样绑定user_id参数:

$sth->bindValue(':user_id', $user_id_value);
我仍然可以避免SQL注入

但是,bindValue()还是一个名为data_type的可选参数,它允许您设置显式数据类型。例如:

$sth->bindValue(':user_id', $user_id_value, PDO::PARAM_INT);
这允许我声明user_id将是一个整数


我的问题是:如果您可以安全地防止SQL注入,那么为什么要在bindValue中使用data_type参数?它是用来强制数据完整性的吗?如果要事先验证数据,是否需要担心使用数据?使用它还有其他我没有想到的好处吗?

基本上是的。强制执行数据类型是一件好事

不要对注入采取保护措施——很久以前,我看到一篇博客文章详细介绍了使用utf8代码进行注入的情况,这些代码用于反勾号和引号等等;虽然未转义,但在作为单个字符进行计算的情况下,允许注入


这并不是说这个问题没有得到解决,我也不是说你很脆弱——只是说假设有时不是最好的做法……

你回答问题的哪一部分?除了“这是件好事”之外,我仍然没有看到任何论据,这不是allerm的技术解释。。。您询问是否存在强制数据类型完整性。如果你不想用,就不要用。我使用它是因为我喜欢额外的强制执行层每一点都有帮助(正如MeTH用户会说),我不是OP。但仍然是——“因为我喜欢那一层额外的执行”——这不是一个技术性的解释。您能举一个例子,说明额外的强制层在哪些方面是真正有用的,并且有显式类型规范和没有显式类型规范是有区别的吗?