0

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

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 ?

4

1 回答 1

4

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

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

于 2012-07-17T00:22:11.260 回答