【发布时间】:2016-04-30 08:56:13
【问题描述】:
阅读一些相关问题here、here 和here。一个简单的查询仍然会触发错误
SQLSTATE[HY000]: General error: 25 bind or column index out of range
$query
INSERT OR IGNORE INTO `menu` (`id`,`name`,`name_clean`,`display`) VALUES (:idInsert,:nameInsert,:name_cleanInsert,:displayInsert);
UPDATE `menu` SET id=:idUpdate,name=:nameUpdate,name_clean=:name_cleanUpdate,display=:displayUpdate WHERE id = 1;
';
$values
[:idInsert] => 1
[:idUpdate] => 1
[:nameInsert] => 2
[:nameUpdate] => 2
[:name_cleanInsert] => 3
[:name_cleanUpdate] => 3
[:displayInsert] => 1
[:displayUpdate] => 1
sn-p。 $this->db->handle 是数据库句柄。如上述参考资料之一所述,我实现了setAttribute(\PDO::ATTR_EMULATE_PREPARES, true) 以便能够执行多个查询
$statement = $this->db->handle->prepare($query);
$statement->execute($values);
与这个人战斗了几个小时,感觉就像我在兜圈子。我在这里错过了什么?
更新
根据需要定义表
DROP TABLE IF EXISTS `menu`;
CREATE TABLE `menu` (`id` INTEGER PRIMARY KEY NOT NULL ,`name` VARCHAR,`name_clean` VARCHAR,`sequence` INTEGER, `display` INTEGER);
【问题讨论】:
-
@RyanVincent 对不起,你能改一下吗?
-
将值绑定到准备好的语句的代码在哪里?
-
请在
execute($values)调用之前发布来自var_dump($values)的完整、未缩写的输出。 -
如果您仅在
$values中包含相关集并单独准备/执行它们,这两个查询是否都会成功?我不确定 SQLite 如何在一个语句中处理多个查询,即使启用了模拟准备。 -
@MichaelBerkowski 他们这样做了,在这种情况下,我必须为他们提供适当的参数。