PDO Execute()函数未绑定参数


PDO Execute() function not binding the parameter

我有以下函数。我希望它打印参数中提供的表中的行数。

private function getTotalCount($tbl){
    $sql = "SELECT count(*) FROM :tbl ;";
    $sth = $this->db->prepare($sql);
    $sth->execute(array(
        ':tbl' => $tbl
    ));
    $data = $sth->fetch(PDO::FETCH_ASSOC);
    print_r($data);
}

但该功能不打印任何内容。。。

当我把功能替换成这样的东西时:

private function getTotalCount($tbl){
    $sql = "SELECT count(*) FROM $tbl ;";
    $sth = $this->db->prepare($sql);
    $sth->execute();
    $data = $sth->fetch(PDO::FETCH_ASSOC);
    print_r($data);
}

然后它工作正常并打印行数。

问题:为什么execute()函数没有将:tbl参数绑定到$tbl??

遗憾的是,MySQL PDO不接受SQL关键字、表名、视图名和字段名的参数。这并没有真正出现在主手册中,但在评论中提到了几次。

第二段代码中的解决方案是变通方法,尽管您可能希望首先清除表名(最好对照表名的白名单进行检查)。更多信息:PHP PDO语句可以接受表或列名作为参数吗?