我有一个“事件”表。为了简单起见,您可以想象它应该像分层类别。它使用嵌套集模型(感谢马克Hillyer他在http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/后)在codeigniter中执行多个不能逐个执行的查询
我的代码:
$query =
"LOCK TABLE event WRITE;
SELECT @ParentRight := parent.rgt, @Level := parent.level FROM event AS parent WHERE parent.id = '{$data['parent_id']}';
UPDATE event SET rgt = rgt + 2 WHERE rgt > @ParentRight;
UPDATE event SET lft = lft + 2 WHERE lft > @ParentRight;
INSERT INTO event(lft, rgt, level) VALUES(@ParentRight, @ParentRight + 1, @Level);
UNLOCK TABLES;";
mysqli_multi_query($this->db->conn_id, $query);
$data['id'] = $this->db->insert_id();
return $this->db->update('event', $data);
在这之后我会与$this->db->update('event', $data)
$data
是用户填充的数组。
问题1:
我无法执行$查询与$这 - > DB->查询($查询);;
解决方案1,没有工作:
I.使用的mysqli分贝引擎。
二, mysqli_multi_query($this->db->conn_id, $query);
虽然我认为它的工作原理,它给了以下错误:
Commands out of sync; you can’t run this command now.
问题2:
$this->db->insert_id()
不起作用(返回0)
问题3:
$this->db->update('event', $data);
错误: Commands out of sync; you can't run this command now
如何纠正此代码的工作?我很乐意为第一个问题寻找解决方案。
你可以有一个查询的数组,并在循环 – GordonM
没有执行它们,你可以在这种情况下,看到执行作为单独的查询不起作用,因为它不记得'@ myRight'和'@ Level'从过去查询的结果变量 –
直到断开连接后变量才被保留吗? – GordonM