PDO 变量是 table 名称的一部分
PDO variable is part of a table name
我正在尝试绑定一个变量,该变量是 table 名称的一部分,当使用 PDO 绑定以防止 SQL 注入时。
我的查询与此类似:
select * from user_:id_user.kb_:id_kbase "."_frequencies"
结果必须是
select * from user_1.kb_123_frequency
其中 user_1.kb_123_frequency
是预期的 table 名称。但是,当参数绑定在:
$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
是一个参数。
所以我的问题是:您可以将 table 名称作为参数传递吗?如果可以,当参数是 table 名称的一部分时如何进行绑定?
非常感谢您的帮助
准备好的语句不能那样工作。
最好(最安全)的方法是只接受一组特定的值,例如使用 switch
语句。
switch ($tbl) {
case "baz":
case "foo":
$tbl = "bar".$tbl;
break;
}
我正在尝试绑定一个变量,该变量是 table 名称的一部分,当使用 PDO 绑定以防止 SQL 注入时。
我的查询与此类似:
select * from user_:id_user.kb_:id_kbase "."_frequencies"
结果必须是
select * from user_1.kb_123_frequency
其中 user_1.kb_123_frequency
是预期的 table 名称。但是,当参数绑定在:
$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
是一个参数。
所以我的问题是:您可以将 table 名称作为参数传递吗?如果可以,当参数是 table 名称的一部分时如何进行绑定?
非常感谢您的帮助
准备好的语句不能那样工作。
最好(最安全)的方法是只接受一组特定的值,例如使用 switch
语句。
switch ($tbl) {
case "baz":
case "foo":
$tbl = "bar".$tbl;
break;
}