Moh*_*aji 13 php mysql mysqli codeigniter multi-query
我有一个"事件"表.为简单起见,您可以想象它应该像分层类别.它使用嵌套集模型(感谢Mark Hillyer在http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/上的帖子)
我的代码:
$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);
Run Code Online (Sandbox Code Playgroud)
之后我将用更新最后插入的对象 $this->db->update('event', $data)
$data 是用户填充的数组.
问题1:
我无法使用$ this-> db-> query($ query)执行$ query ; ;
解决方案1无效:
I.使用mysqli数据库引擎.
II.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
如何更正此代码才能正常工作?我很乐意为第一个问题找到解决方案.
web*_*ean 14
也许使用交易?
$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->query('AND YET ANOTHER QUERY...');
$this->db->trans_complete();
Run Code Online (Sandbox Code Playgroud)
https://www.codeigniter.com/user_guide/database/transactions.html
为什么不编写一个存储过程来执行上面列出的所有 SQL,并将查询中的变量作为参数。然后只需将存储过程作为单个 SQL 语句调用;
$sql = "CALL some_sp($param1, $param2...etc)";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22760 次 |
| 最近记录: |