调用未定义的PDO执行方法


Call to undefined method PDO execute

我在页面上看到了这个错误。问题出在哪里。。我在这里检查了很多有同样问题的线程,但都无法解决。

$ip_address = $_SERVER['REMOTE_ADDR'];
$vote_rank = 0;
$query = $pdo->prepare("SELECT SUM(vote_rank) as vote_rank FROM ipaddress_vote_map WHERE image_id = ? and ip_address = ?");
$query -> bindParam(1, $_GET['image_id'], PDO::PARAM_INT);
$query -> bindParam(1, $ip_address, PDO::PARAM_INT);                          
$rowsa = $pdo->execute();
$up = "";
$down = "";
if(!empty($rowsa[0]["vote_rank"])) {
   $vote_rank = $row[0]["vote_rank"];
   if($vote_rank == -1) {
       $up = "enabled";
       $down = "disabled";
   }
if($vote_rank == 1) {
       $up = "disabled";
       $down = "enabled";
}
}

Prepare返回您需要执行的对象,因此您的代码应该是:

$stmt= $pdo->prepare("SELECT SUM(vote_rank) as vote_rank FROM ipaddress_vote_map WHERE image_id = ? and ip_address = ?");
$stmt-> bindParam(1, $_GET['image_id'], PDO::PARAM_INT);
$stmt-> bindParam(2, $ip_address, PDO::PARAM_INT);                          
$rowsa = $stmt->execute();

executePDOStatement类的方法(请参阅文档),而不是PDO的方法。PDO::prepare的返回值是PDOStatement的实例,因此用$query->execute(); 替换$pdo->execute();

bindParam调用在我看来也不正确,正如文档对第一个参数($parameter)所说:

参数标识符。对于使用命名占位符准备的语句,这将是一个形式为:name的参数名称。对于使用问号占位符准备的语句,这将是参数的1索引位置。

这意味着:

$query -> bindParam(1, $_GET['image_id'], PDO::PARAM_INT);
$query -> bindParam(1, $ip_address, PDO::PARAM_INT);

应为:

$query->bindParam(1, $_GET['image_id'], PDO::PARAM_INT);
$query->bindParam(2, $ip_address, PDO::PARAM_INT);