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
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
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
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();
wenn Sie einen schnellen Test für Ihre Anfrage benötigen, funktioniert das für mich gut
echo $this->db->last_query(); die;
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];
Sie können dies am Ende einfach verwenden.
echo $this->db->last_query();
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();
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();
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 ();
Ich versuche, @ Chumillas 'Antwort und @ Chhameeds Antwort, aber es funktioniert nicht, weil die SQL falsch ist. So fand ich einen neuen Ansatz, wie folgt:
echo $sql; flush(); exit;
in vor return $sql;
_compile_select
Funktion von DB_active_rec.php
ein.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!
Sie haben viele Möglichkeiten, SQL von Abfragen abzurufen.
Sie sollten Folgendes verwenden:
$sql = $this->db->last_query();
CodeIgnitier bietet keine allgemeine Möglichkeit, SQL vor der Ausführung abzurufen. Sie müssen eine bestimmte Methode verwenden.
$sql = $this->db->get_compiled_select()
$sql = $this->db->get_compiled_insert()
$sql = $this->db->get_compiled_update()
$sql = $this->db->get_compiled_delete()