Выполнение нескольких запросов в codeigniter, которые не могут быть выполнены по одному

У меня есть таблица "события". Для простоты можно представить, что она должна быть похожа на иерархическую категорию. В ней используется модель вложенных множеств (Спасибо 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);

И после этого я собираюсь обновить последний вставленный объект с помощью $this->db->update('event', $data)

$data - это массив, который заполнил пользователь.


Проблема 1:

Я не смог выполнить $query с помощью $this->db->query($query);;

Решение 1, которое не сработало:

I. Использовать mysqli db движок.

II. mysqli_multi_query($this->db->conn_id, $query); Хотя я думал, что это работает, оно выдает следующую ошибку:

Команды рассинхронизированы; вы не можете выполнить эту команду сейчас.


Проблема 2:

$this->db->insert_id() не работает (возвращает 0)

Проблема 3:

$this->db->update('event', $data); ошибки: Commands out of sync; you can't run this command now


Как исправить этот код, чтобы он работал? Я был бы даже рад найти решение для первой проблемы.

13
задан Mohammad Naji 25 January 2012 в 16:16
поделиться