【发布时间】:2013-06-20 21:44:03
【问题描述】:
我遇到了这个烦人的错误,虽然我知道为什么会遇到这个错误,但我终其一生都找不到解决办法。
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),否则引擎会将它们变成字符串。
我没有收到 Invalid number of parameters 错误,因此所有占位符都已正确绑定(我假设)。
查询:
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()。
【问题讨论】:
-
尝试在google中搜索“PDO绑定LIMIT参数”
-
1) 最好包含人类可读的错误消息,而不仅仅是神秘代码,2) 显示您的实际查询,以便我们查看错误的根源。
-
@deceze 如果那里有任何人类可读的消息,我会:a)现在可能已经解决了,b)如果没有,那么把它包括在这里。这是完整的错误消息,相信我。
-
错误:2031 (CR_PARAMS_NOT_BOUND)消息:没有为准备好的语句中的参数提供数据来自文档dev.mysql.com/doc/refman/5.0/en/error-messages-client.html
-
您确定要绑定
:strength吗?确定$limit是真的吗?
标签: php mysql pdo prepared-statement