Das ausführen von mehreren Abfragen in codeigniter, dass kann nicht ausgeführt werden eins nach dem anderen

Habe ich ein "Ereignis" - Tabelle. Der Einfachheit halber können Sie sich vorstellen, dass es sollte wie ein hierarchische Kategorie. Es verwendet die nested set Modell (vielen Dank an Mark Hillyers für seinen posten bei http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/)

Mein code:

$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);

Und danach werde ich update das zuletzt eingefügte Objekt mit $this->db->update('event', $data)

$data ist ein array, das die Benutzer gefüllt hat.


Problem 1:

Konnte ich nicht ausführen $query mit $this->db->query($query);;

Lösung 1, das hat nicht funktioniert:

I. Verwenden mysqli db-engine.

II. mysqli_multi_query($this->db->conn_id, $query); Während ich dachte, es funktioniert, es gibt den folgenden Fehler:

Commands out of sync; you can’t run this command now.


Problem 2:

$this->db->insert_id() funktioniert nicht (Rückgabe 0)

Problem 3:

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


Wie kann ich das korrigieren dieser code funktioniert? Ich würde auch gerne eine Lösung für das erste problem.

  • Sie könnten eine Reihe von Einzel-Abfragen, und führen Sie Sie in einer Schleife
  • Nein, wie Sie sehen können, in diesem Fall die Ausführung als separate Abfragen funktioniert nicht, weil es nicht erinnern können @myRight und @Level vars aus der Vergangenheit Abfragen " Ergebnisse
  • Sind Variablen, die nicht erhalten, bis Sie die Verbindung trennen?
  • Was ich weiß ist nur, dass die vars nicht zugänglich sind, nach der Abfrage, erklärt Sie gelassen.
  • Wow, das ist merkwürdig Verhalten, weil ich dachte, das Semikolon würde Kennzeichnen das Ende der Anweisung trotzdem.
  • Sorry, ich verstehe nicht, was du meinst, durch "merkwürdiges Verhalten". Am Ende jeder mysql-Befehl, es IST ein Semikolon. Ich denke, dass die nicht verstehen, Ihre Rede :-/ ich habe es schon aktualisiert, meine Frage, ich habe letztens, dass selbst mit mysqli_multi_query() funktioniert nicht!
  • Was ist die Fehlermeldung in problem 1?
  • Was ich meine ist, dass dein SQL-string wird aufgesplittet in mehrere SQL-Anweisungen mit Semikolons. Zum Beispiel LOCK TABLE WRITE; ist eine einzelne SQL-Anweisung das Semikolon (;) - symbol am Ende markiert das Ende der Anweisung. Es ist zwar nur eine einzelne Zeichenfolge der SQL-string enthält mehrere Aussagen.
  • Hinzugefügt die Fehlermeldung zu Problem#1. Danke für deinen Hinweis 🙂
  • Sorry für das Missverständnis Ihren vorherigen Kommentar. Ja, ich bin mit mehrere Anweisungen auf der gleichen Abfrage, da konnte ich nicht ausführen, Sie eins nach dem anderen. Da der zweite Befehl halten Sie eine variable, die verwendet werden soll später.
  • Was ist mit SELECT FOR UPDATE?

Schreibe einen Kommentar