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

Way*_*tty 5 php mysql pdo

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

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

$sth = $dbh->prepare('SELECT `name` FROM `user` WHERE `user_id` = :user_id');
Run Code Online (Sandbox Code Playgroud)

我可以像这样绑定user_id参数:

$sth->bindValue(':user_id', $user_id_value);
Run Code Online (Sandbox Code Playgroud)

我仍然可以安全地接受SQL注入.

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

$sth->bindValue(':user_id', $user_id_value, PDO::PARAM_INT);
Run Code Online (Sandbox Code Playgroud)

这允许我声明user_id将是一个整数.

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

Ian*_*ood -1

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

不要假设可以防止注入 - 很久以前,我看到一篇博客文章详细介绍了使用 utf8 代码进行反引号和引号以及诸如此类的注入;虽然没有转义,但它被评估为单个字符,因此允许注入。

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

  • 您回答问题的哪一部分?除了“这是一件好事”之外,我仍然没有看到任何争论,这根本不是技术解释 (2认同)