PDO:绑定时使用data_type的目的是什么?

时间:2012-09-07 11:34:37

标签: php mysql pdo

  

可能重复:
  Php PDO::bindParam data types.. how does it work?

比如说,我有以下准备好的声明:

$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参数?是否有强制数据完整性?如果您事先验证了数据,是否需要担心使用它?使用它还有其他任何我没想过的好处吗?

1 个答案:

答案 0 :(得分:-1)

基本上 - 是的。执行data_types是一件好事。

不要假设注射防护 - 很久以前我看过一篇博文,详细介绍了使用utf8代码进行反滴答和引号的注射以及什么不是;虽然没有被评估为单个字符并且因此允许注入而被转义。

这并不是说这个问题没有得到解决,也不是说你很脆弱 - 只是说假设有时不是最好的事情......