28 Stimmen

Abrufen von Roh-SQL-Abfragen in CodeIgniter 1.7

Ich versuche, einige Code in meinem ersten ernsthaften CodeIgniter app zu debuggen und ich kann nicht scheinen zu finden, wo ich einfach die rohe SQL, die meine ActiveRecord-Code gerade generiert bekommen kann.

    $where  = 'DAY(`datetime_start`) = '. date('d',$day) .' AND ';
    $where .= 'MONTH(`datetime_start`) = '. date('m',$day) .'';

    $this->db->from('events')->where($where);
    $result = $this->db->get();

Vielen Dank für die Hilfe!

45voto

hipertracker Punkte 2310

Bevor die Abfrage läuft:

$this->db->_compile_select(); 

Und nachdem es gelaufen ist:

$this->db->last_query();

2 Stimmen

_compile_select() ist in neueren Versionen von CodeIgniter als geschützt gekennzeichnet (vorher war sie wahrscheinlich nur aus Gründen der PHP4-Kompatibilität nicht als geschützt deklariert). Sie könnten also einfach das Limit auf 1 setzen, um die Ausführung einer großen Abfrage zu vermeiden und dann last_query() aufrufen, oder Sie könnten reflection verwenden, aber die erste Option ist vorzuziehen.

0 Stimmen

Auch: Es sieht so aus, als ob get_compiled_select() in einer zukünftigen Version von CodeIgniter verfügbar sein wird; es ist bereits im Entwicklungszweig ( github.com/EllisLab/CodeIgniter/blob/develop/system/database/ ). Ich habe diese Methode in DB_active_rec kopiert, und sie funktioniert einwandfrei, auch in Verbindung mit dieser Bibliothek: github.com/NTICompass/CodeIgniter-Unterabfragen

10voto

bkorte Punkte 721

Natürlich habe ich es 2 Minuten nach dem Posten gefunden, mit freundlicher Genehmigung von Phil Sturgeon .

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

8voto

John McCollum Punkte 5122

Sie können auch Folgendes in Ihren Controller eingeben:

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

Sie werden Anfragen erhalten und vieles mehr.

1voto

Ukuser32 Punkte 2031

Für alle, die diesen alten Beitrag finden und sich fragen, was das in der neuesten Version 3 ist, lautet die Funktion $this->db->get_compiled_select().

-2voto

Babak Bandpay Punkte 177

Bis zur Veröffentlichung der nächsten Version von CI kann man so etwas machen

private function get_query_string()
{
    return  'SELECT ' . 
            implode( ' , ' , $this->db->ar_select ) .
            ' FROM ' .
            implode( ' , '  , $this->db->ar_from ) .
            ( count( $this->db->ar_where ) ? ' WHERE ' : '' ) .
            implode( ' ' , $this->db->ar_where );
}

1 Stimmen

Es ist sehr unwahrscheinlich, dass dies genaue Ergebnisse darüber liefert, welche Abfrage tatsächlich ausgeführt wird

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X