5

可能重复:
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 将是一个整数。

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

4

1 回答 1

-1

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

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

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

于 2012-09-07T11:41:04.117 回答