我在页面上看到了这个错误。问题出在哪里。。我在这里检查了很多有同样问题的线程,但都无法解决。
$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();
execute
是PDOStatement
类的方法(请参阅文档),而不是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);