PDO:什么';s绑定时使用data_type的目的


PDO: What's the purpose of using data_type while binding?

可能重复:
Php PDO::bindParam数据类型。。它是如何工作的?

例如,假设我有以下准备好的声明:

$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将是一个整数。

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

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

不要想当然地认为可以防止注入——很久以前,我看到一篇博客文章详细介绍了使用utf8代码进行反勾和引号之类的注入;其虽然在被评估为单个字符的情况下未被转义并且因此允许注入。

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