2009-10-02 6 views
24

Ich versuche, Code in meiner ersten seriösen CodeIgniter-App zu debuggen, und ich kann nicht finden, wo ich einfach die Raw-SQL abrufen kann, die mein ActiveRecord-Code gerade generiert hat.Erste rohe SQL-Abfragen in CodeIgniter 1.7

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

Danke für die Hilfe!

Antwort

41

Bevor die Abfrage ausgeführt wird:

$this->db->_compile_select(); 

Und nachdem es laufen:

$this->db->last_query(); 
+2

_compile_select() ist in neueren Versionen von CodeIgniter als geschützt gekennzeichnet (es wurde wahrscheinlich nur für PHP4-Kompatibilität zuvor nicht geschützt erklärt). Sie könnten also 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

Auch: Es sieht so aus, als wäre get_compiled_select() in einer zukünftigen Version von CodeIgniter verfügbar; Es ist bereits im Dev-Zweig (https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_query_builder.php). Ich kopierte diese Methode nach DB_active_rec und es funktionierte gut, sogar in Verbindung mit dieser Bibliothek: https://github.com/NTICompass/CodeIgniter-Subqueries –

8

Natürlich fand ich es 2 Minuten nach der Veröffentlichung, mit freundlicher Genehmigung von Phil Sturgeon.

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

Auch können Sie die folgenden in Ihrem Controller setzen:

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

Sie werden Anfragen erhalten und vieles mehr.

+0

sehr hilfreich für mich .... Lasten des Dankes :) –

-2

Sie so etwas wie dies bis CIs nächste Version machen kann, wird freigegeben

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

Dies ist sehr unwahrscheinlich, genaue Ergebnisse zu liefern, welche Abfrage tatsächlich ausgeführt wird – Matthew

0

Für jedermann diesen alten Beitrag zu finden und zu fragen, was das in der neuesten v3 ist, ist die Funktion $ this-> db-> get_compiled_select().