PDO Execute()函数不绑定参数

时间:2012-07-16 22:56:31

标签: php pdo

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

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 ??

1 个答案:

答案 0 :(得分:4)

遗憾的是,MySQL PDO不接受SQL关键字,表名,视图名和字段名的参数。 main manual中没有出现这种情况,但在comments中提到了几次。

您在第二段代码中的解决方案是解决方法,尽管您可能希望首先清理表名称(检查表名称的白名单是理想的)。更多信息:Can PHP PDO Statements accept the table or column name as parameter?