我有以下函数。我希望它打印参数中提供的表中的行数。
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语句可以接受表或列名作为参数吗?