我有以下功能。我希望它打印其参数中提供的表中的行数。
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 ??
答案 0 :(得分:4)
遗憾的是,MySQL PDO不接受SQL关键字,表名,视图名和字段名的参数。 main manual中没有出现这种情况,但在comments中提到了几次。
您在第二段代码中的解决方案是解决方法,尽管您可能希望首先清理表名称(检查表名称的白名单是理想的)。更多信息:Can PHP PDO Statements accept the table or column name as parameter?