【发布时间】:2014-02-28 23:17:12
【问题描述】:
我开始使用 PDO 来支持 PHP/MySQL 中的多数据库,但由于某种原因,一个查询不断产生错误消息:
$account_email = 'test@test.com';
$statement = $pdo->prepare("SELECT id FROM account WHERE account_email = :email");
$statement->execute( array(':email' => $account_email ));
警告:PDOStatement::execute(): SQLSTATE[HY093]: 参数号无效:绑定变量的数量与标记的数量不匹配
出于兴趣,我尝试了其他实现方法,但它抛出了同样的错误:
$statement = $pdo->prepare("SELECT id FROM account WHERE account_email = ?");
$statement->execute( array( $account_email ));
我已经做了很多研究,显然 PDO 对格式很挑剔。 PDO 是否不喜欢这个查询?间距?
仅供参考:我已经阅读了 StackOverflow 的大部分其他问题。有时人们在数组中有额外的参数,有时是拼写错误,有些人的语法错误不会产生错误,但仍然会影响参数的数量。在这种情况下,一切似乎都很完美。
【问题讨论】:
-
对我来说看起来不错。那是您的脚本的精确副本,还是您在复制到 SO 时进行了更改?实际代码中可能存在拼写错误。
-
它是复制和粘贴,但出于安全原因更改电子邮件地址除外。另一个有趣的事情是,我在它上面有一个插入语句(用于记录),它工作正常,并且遵循完全相同的格式。我还在 $account_email 之后回显并停止了脚本,以确保所有值都正确传递给脚本。他们都很好。我就是想不通。
-
脚本中是否有对
bindParam或bindValue的调用? -
如果您遵循here 的建议并将您的代码减少到最低限度,您可以隔离您的问题,甚至可以解决它。作为一名老程序员,我逐步开发代码。