在尝试使用PDO绑定来防止SQL注入时,我试图绑定作为表名一部分的变量。
我的查询与此类似:
select * from user_:id_user.kb_:id_kbase "."_frequencies"
必须导致
select * from user_1.kb_123_frequency
其中user_1.kb_123_frequency
是预期的表名。但是,当绑定参数时:
$st->bindParam(':id_user', $id_user, PDO::PARAM_INT);
$sth->bindParam(':id_kbase', $id_kbase, PDO::PARAM_INT);
$sth->execute();
它无法绑定并引发以下错误:
发生异常。
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: :id_kbase
我认为这是因为我试图将“ kb_:id_kbase
”与“ _frequencies
”连接起来,但是:kb_kbase
是一个参数。
所以我的问题是:您可以将表名作为参数传递吗,如果可以,当参数是表名的一部分时如何进行绑定?
非常感谢您的帮助
答案 0 :(得分:-1)
准备好的语句不能那样工作。
最好的(最安全的)方法是仅接受一组特定的值,例如使用switch
语句。
switch ($tbl) {
case "baz":
case "foo":
$tbl = "bar".$tbl;
break;
}