Tôi có bảng "sự kiện". Để đơn giản, bạn có thể tưởng tượng rằng nó phải giống như một danh mục phân cấp phân cấp. Nó sử dụng lồng nhau đặt mô hình (Cảm ơn Mark Hillyer cho bài của mình tại http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/)Thực hiện nhiều truy vấn trong trình mã hóa mà không thể thực hiện từng cái một
Mã của tôi:
$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);
Và sau đó tôi sẽ cập nhật các đối tượng chèn ngoái với $this->db->update('event', $data)
$data
là một mảng mà người dùng đã điền.
Vấn đề 1:
tôi không thể thực hiện $ query với $ this-> db-> query ($ query);;
Giải pháp 1 mà không làm việc:
I. Sử dụng mysqli động cơ db.
II. mysqli_multi_query($this->db->conn_id, $query);
Trong khi tôi nghĩ nó hoạt động, nó được đưa ra các lỗi sau:
Commands out of sync; you can’t run this command now.
Vấn đề 2:
$this->db->insert_id()
không hoạt động (trả về 0)
Vấn đề 3:
$this->db->update('event', $data);
lỗi: Commands out of sync; you can't run this command now
Tôi làm cách nào để sửa mã này hoạt động? Tôi rất vui khi tìm được giải pháp cho vấn đề đầu tiên.
Bạn có thể có một loạt các truy vấn đơn và thực hiện chúng trong một vòng lặp – GordonM
Không, như bạn thấy trong trường hợp này thực hiện như các truy vấn riêng biệt không hoạt động bởi vì nó không thể thu hồi '@ myRight' và' @ Level' vars từ kết quả truy vấn trong quá khứ ' –
Biến không được bảo tồn cho đến khi bạn ngắt kết nối? – GordonM