wake-up-neo.com

So drucken Sie die SQL-Anweisung im Codeigniter-Modell

Ich habe eine SQL-Anweisung in meinem Modell,

Sage ich dann

$query = $this->db->query($sql, array(fields, fields1);

if ($query) {
    return true:
} else {
    echo "failed";
    return false;
}

Meine Abfrage schlägt immer fehl. Wie kann ich die genaue SQL-Anweisung, die an meine Datenbank gesendet wird, mit PHP drucken? Und zeige das in meiner PHP-Ansicht, Seite

89
Technupe

So zeigen Sie die Abfragezeichenfolge an:

print_r($this->db->last_query());    

So zeigen Sie das Abfrageergebnis an:

print_r($query);

Die Profiler-Klasse zeigt Benchmark-Ergebnisse, von Ihnen ausgeführte Abfragen und $ _POST-Daten am unteren Rand Ihrer Seiten an. Um dem Profiler die folgende Zeile an einer beliebigen Stelle innerhalb Ihrer Controller-Methoden zu platzieren:

$this->output->enable_profiler(TRUE);

Benutzerhandbuch für das Profiling: https://www.codeigniter.com/user_guide/general/profiling.html

84
Novo

Sie können dies verwenden:

$this->db->last_query();

"Gibt die letzte Abfrage zurück, die ausgeführt wurde (die Abfragezeichenfolge, nicht das Ergebnis)."

Reff: https://www.codeigniter.com/userguide3/database/helpers.html

224
chhameed

Sie können das von ActiveRecord generierte SQL anzeigen:

Bevor die Abfrage ausgeführt wird:

$this->db->_compile_select(); 

Und nachdem es gelaufen ist:

$this->db->last_query(); 
37
pedro

wenn Sie einen schnellen Test für Ihre Anfrage benötigen, funktioniert das für mich gut

echo $this->db->last_query(); die;
16
Programmer

Nachdem ich erfolglos versucht hatte, _compiled_select() oder get_compiled_select() zu verwenden, habe ich nur das db-Objekt ausgedruckt, und Sie können die Abfrage dort in der queries-Eigenschaft sehen.

Versuch es selber:

var_dump( $this->db );

Wenn Sie wissen, dass Sie nur eine Abfrage haben, können Sie diese direkt ausdrucken:

echo $this->db->queries[0];
12

Sie können dies am Ende einfach verwenden.

echo $this->db->last_query();
9
Muhammad Sadiq

Es gibt eine neue öffentliche Methode get_compiled_select, die die Abfrage vor dem Ausführen ausdrucken kann. _compile_select ist jetzt geschützt und kann daher nicht verwendet werden.

echo $this->db->get_compiled_select(); // before $this->db->get();
8
Naveed

Weder last_query() noch get_compiled_select() funktionieren für mich, daher funktioniert eine geringfügige Änderung des Pedro-Codes gut für mich. Fügen Sie ->get() nicht in Ihren Build ein. Dies muss vor dem -> get () sein.

 echo $this->EE->db->_compile_select();
2
Laurence Cope

Fügen Sie diese Zeile direkt nach der Abfrage ein, die Sie drucken möchten.

Beispiel:

$ query = $ this-> db-> query ('SELECT * FROM-Tabelle WHERE-Bedingung');

// Diese Zeile hinzufügen.

print ($ this-> db-> last_query ());

Ausfahrt();  

oder

echo $ this-> db-> last_query ();  

1
1247p

Ich versuche, @ Chumillas 'Antwort und @ Chhameeds Antwort, aber es funktioniert nicht, weil die SQL falsch ist. So fand ich einen neuen Ansatz, wie folgt:  

  • Fügen Sie echo $sql; flush(); exit; in vor return $sql;_compile_select Funktion von DB_active_rec.php ein.
1
Chanble

Ich hatte genau das gleiche Problem und fand schließlich die Lösung. Meine Abfrage läuft wie folgt:

$result = mysqli_query($link,'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC ');

Um den Befehl sql anzuzeigen, musste ich lediglich eine Variable ($ resultstring) mit genau demselben Inhalt wie meine Abfrage erstellen und dann wie folgt ausdrücken: <?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>

Es klappt!

0
Mark Janssen

Sie haben viele Möglichkeiten, SQL von Abfragen abzurufen.

Nach Abfrageausführung

Sie sollten Folgendes verwenden: 

$sql = $this->db->last_query(); 

Vor der Abfrageausführung (bestimmte SQL-Anweisungsmethoden)

CodeIgnitier bietet keine allgemeine Möglichkeit, SQL vor der Ausführung abzurufen. Sie müssen eine bestimmte Methode verwenden.

Holen Sie sich eine SELECT-Abfrage

$sql = $this->db->get_compiled_select()

Holen Sie sich eine INSERT-Abfrage

$sql = $this->db->get_compiled_insert()

Holen Sie sich eine UPDATE-Abfrage

$sql = $this->db->get_compiled_update()

Holen Sie sich eine DELETE-Abfrage

$sql = $this->db->get_compiled_delete()
0
jedema