绑定变量的数量与令牌PDO的数量不匹配


Number of bound variables does not match number of tokens PDO

相对于PDO(和一般的OOP)来说,我的3命名参数给了我一个错误。这是我编写的函数,用于检查数据库中是否已经存在一个值(这样我就不会有重复的条目):

function checkTable($table, $column, $value, $con) {
    $stmt = $con->prepare("SELECT * FROM :tbl WHERE :col = :val");
    $stmt->execute(['tbl' => $table, 'col' => $column, 'val' => $value]);
    return $stmt->fetchAll();
}

当然$con是PDO连接(是的,我已经检查过了,它是连接的,我可以在数据库上运行正常查询)我用这段代码调用函数:

checkTable("posts", "title", "title", $con);

我希望看到true被返回,因为我在中输入的值是否存在于数据库中,但我得到的只是

'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens'

EDIT:我已经在函数外测试了这个,并且它正如预期的那样工作:

$bind = ['tbl' => "posts", 'col' => "title", 'val' => "title"];
$query = query("SELECT * FROM :tbl WHERE :col = :val", $con, $bind);
var_dump($query);

其中query()函数看起来像这样:

function query($query, $con, $bind = null) {
    try {
        $stmt = $con->prepare($query);
        $stmt->execute($bind);
        $stmt->setFetchMode(PDO::FETCH_ASSOC);
        $result = $stmt->fetchAll();
        return $result;
    } catch(Exception $e) {
        return false;
    }
}

不能在准备好的语句中使用表名和列名进行替换。:tbl -是表名。因此,在查询:col, :val中只有两个令牌。

同样:col将被'column_name'(带引号)取代。其中condition将是'column_name'='value'