例如,我有以下准备好的声明:
$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 参数?是否存在强制数据完整性?如果您事先验证您的数据,您是否需要担心使用它?使用它还有其他我没有想到的好处吗?