Error: PDO Error: SQLSTATE[HY000]: General error: 2031
此错误表明参数有问题SQL 查询。在这种情况下,问题似乎出在使用 bindValue() 方法手动将 LIMIT 占位符添加到查询中。
以下代码导致错误:
<code class="php">if ($limit) { $sth->bindValue(':page', $page - 1, PDO::PARAM_INT); $sth->bindValue(':entries_per_page', $page * $entries_per_page, PDO::PARAM_INT); }</code>
发生该错误的原因是查询包含占位符(:page 和 :entries_per_page),需要使用 bindValue() 绑定这些占位符,然后才能执行查询。然而,在使用bindValue()绑定LIMIT占位符之前,引擎会将它们转换为字符串。要解决此问题,您可以使用以下代码:
<code class="php">if ($limit) { $query = str_replace(':page', $page - 1, $query); $query = str_replace(':entries_per_page', $page * $entries_per_page, $query); $sth->execute($criteria); }</code>
此代码将在执行查询之前将查询中的占位符替换为其值。
谨防重复参数名称
需要注意的是,错误 2031 也可能是由于将两个值绑定到同一参数名称而引起的。例如:
<code class="php">$sth->bindValue(':colour', 'blue'); $sth->bindValue(':colour', 'red');</code>
使用相同的参数名称两次将导致错误。因此,确保每个参数名称是唯一的非常重要。
以上是什么可能导致 PDO 中的 SQLSTATE[HY000]: 一般错误: 2031?的详细内容。更多信息请关注PHP中文网其他相关文章!