PDO错误:SQLSTATE [HY000]:一般错误:2031
我收到了这个令人讨厌的错误,尽管我知道为什么要得到它,但我终生无法找到解决方案。
if ($limit) { $sth->bindValue(':page', $page - 1, PDO::PARAM_INT);
$sth->bindValue(':entries_per_page', $page * $entries_per_page, PDO::PARAM_INT);
}
$sth->execute($criteria);
查询包含占位符(:placeholder
)。但是要添加这些LIMIT占位符,我需要使用手动方法(bindValue
),因为否则引擎会将它们转换为字符串。
我没有收到无效的参数数量错误,因此所有占位符均已正确绑定(我认为)。
查询:
SELECT `articles`.*, `regional_municipalities`.`name` AS `regional_municipality_name`, `_atc_codes`.`code` AS `atc_code`, `_atc_codes`.`name` AS `substance`
FROM `articles`
LEFT JOIN `_atc_codes`
ON (`_atc_codes`.`id` = `articles`.`atc_code`)
JOIN `regional_municipalities`
ON (`regional_municipalities`.`id` = `articles`.`regional_municipality`)
WHERE TRUE AND `articles`.`strength` = :strength
GROUP BY `articles`.`id`
ORDER BY `articles`.`id`
LIMIT :page, :entries_per_page
除最后两个LIMIT(我与之手动绑定)外,所有占位符值均位于$ criteria中bindValue()
。
回答:
您不能使用->bind*
和
->execute($params)
。使用或;如果您将参数传递给execute()
,这些将使PDO忘记已经通过绑定的参数->bind*
。
以上是 PDO错误:SQLSTATE [HY000]:一般错误:2031 的全部内容, 来源链接: utcz.com/qa/429194.html