比如说,我有以下准备好的声明:
$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参数?是否有强制数据完整性?如果您事先验证了数据,是否需要担心使用它?使用它还有其他任何我没想过的好处吗?
答案 0 :(得分:-1)
基本上 - 是的。执行data_types是一件好事。
不要假设注射防护 - 很久以前我看过一篇博文,详细介绍了使用utf8代码进行反滴答和引号的注射以及什么不是;虽然没有被评估为单个字符并且因此允许注入而被转义。
这并不是说这个问题没有得到解决,也不是说你很脆弱 - 只是说假设有时不是最好的事情......