Ich habe eine SQL-Anweisung in meinem Modell.
Ich sage 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 PHP dazu bringen, die genaue SQL-Anweisung zu drucken, die an meine Datenbank gesendet wird? Und zeigen Sie das auf meiner PHP-Ansicht, Seite
php
sql
codeigniter
Technupe
quelle
quelle
Sie können dies verwenden:
"Gibt die zuletzt ausgeführte Abfrage zurück (die Abfragezeichenfolge, nicht das Ergebnis)."
Reff: https://www.codeigniter.com/userguide3/database/helpers.html
quelle
Sie können das von ActiveRecord generierte SQL anzeigen:
Bevor die Abfrage ausgeführt wird:
Und nachdem es gelaufen ist:
quelle
$this->db->get_compiled_select()
stattdessen Verwenden .Wenn Sie einen kurzen Test für Ihre Anfrage benötigen, funktioniert dies hervorragend für mich
quelle
Nachdem ohne Erfolg versucht , zu verwenden ,
_compiled_select()
oderget_compiled_select()
ich gedruckt nur dasdb
Objekt, und Sie können die Abfrage dort in der siehequeries
Eigenschaft.Versuch es selber:
Wenn Sie wissen, dass Sie nur eine Abfrage haben, können Sie diese direkt ausdrucken:
quelle
Es gibt eine neue öffentliche Methode
get_compiled_select
, mit der die Abfrage gedruckt werden kann, bevor sie ausgeführt wird._compile_select
ist jetzt geschützt und kann daher nicht verwendet werden.quelle
Sie können dies einfach am Ende verwenden ..
quelle
Weder noch
last_query()
oderget_compiled_select()
funktioniert für mich, daher funktioniert eine geringfügige Änderung des Pedro-Codes für mich einwandfrei. Nicht->get()
in Ihren Build aufnehmen, dies muss vor dem -> get () seinquelle
Ich versuche, die Antwort von @ Chumillas und die Antwort von @ chhameed zu beantworten, aber es funktioniert nicht, weil die SQL falsch ist. Also habe ich einen neuen Ansatz gefunden, wie folgt :
echo $sql; flush(); exit;
in vorreturn $sql;
_compile_select
Funktion vonDB_active_rec.php
quelle
Fügen Sie diese Zeile direkt nach der Abfrage hinzu, die Sie drucken möchten.
Beispiel:
$ query = $ this-> db-> query ('SELECT * FROM table WHERE Bedingung');
// Diese Zeile hinzufügen.
var_dump ($ this-> db-> last_query ());
Ausfahrt();
oder
echo $ this-> db-> last_query ();
quelle
Ich verwende xdebug, um diese Werte in VSCode mit der entsprechenden Erweiterung und CI v2.x zu überwachen. Ich füge den Ausdruck
$this->db->last_query()
im Überwachungsabschnitt hinzu und füge einenxdebugSettings
Knoten wie diesen hinzu, um einen nicht abgeschnittenen Wert in der Datei launch.json zu erhalten.Führen Sie meinen Debuger mit dem Haltepunkt aus und wählen Sie schließlich einfach meinen Ausdruck aus und klicken Sie auf rechts> Wert kopieren.
quelle
Ich hatte genau das gleiche Problem und fand schließlich die Lösung. Meine Abfrage lautet wie folgt:
Um den Befehl sql anzuzeigen, musste ich lediglich eine Variable ($ resultstring) mit genau demselben Inhalt wie meine Abfrage erstellen und diese dann wie folgt wiedergeben:
<?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>
Es klappt!
quelle
Verwenden Sie
get_compiled_select()
diese Option, um die Abfrage abzurufen, anstatt sie zu ersetzenquelle
Ich habe hier alle Antworten gelesen, kann sie aber nicht bekommen
zu arbeiten, gab es mir Fehler wie,
Also habe ich
protected
aus der folgenden Zeile aus der Datei entfernt\system\database\DB_active_rec.php
und es hat funktioniertquelle