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;
}