问题描述
我收到了这个令人讨厌的错误,尽管我知道为什么要得到它,但我终生无法找到解决方案.
I'm getting this annoying error and although I have an idea of why I'm getting it, I can't for the life of me find a solution to it.
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
),因为否则引擎会将它们转换为字符串.
Query contains placeholders (:placeholder
). But to add those LIMIT placeholders, I need to use the manual method (bindValue
) because otherwise the engine will turn them into strings.
我没有收到无效数量的参数"错误,因此所有占位符都已正确绑定(我认为).
I'm not getting the Invalid number of parameters error, so all placeholders have been bound correctly (I assume).
查询:
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
所有占位符值都位于$ criteria中,但最后两个LIMIT除外,我用bindValue()
手动绑定了它们.
All placeholder values reside in $criteria, except for the last two LIMIT, which I manually bind with bindValue()
.
推荐答案
您不能使用->bind*
和 ->execute($params)
.使用或;如果将参数传递给execute()
,则这些参数会使PDO忘记已经通过->bind*
绑定的参数.
You cannot use ->bind*
and ->execute($params)
. Use either or; if you pass parameters to execute()
, those will make PDO forget the parameters already bound via ->bind*
.
这篇关于PDO错误:SQLSTATE [HY000]:一般错误:2031的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!