2011-05-26 10 views
79

mam instrukcji SQL w moim modelu,Jak drukować SQL w CodeIgniter modelu

I wtedy powiedzieć

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

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

Moje zapytanie zawsze kończy się niepowodzeniem, w jaki sposób uzyskać php aby wydrukować dokładną instrukcję SQL są wysyłane do mojej bazy danych? I wyświetli że na moim php, strona

+1

proszę wybrać odpowiedź z większą oceną. To najlepsze. –

+0

@ WasimA. Zawsze to nie jest prawda –

Odpowiedz

35

You może wyświetlać wygenerowany przez ActiveRecord kod SQL:

Przed uruchomieniem zapytania:

$this->db->_compile_select(); 

A po jego uruchomieniu:

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

kiedy używam $ this-> db -> _ compile_select(); Otrzymuję Błąd krytyczny: Wywołanie metody chronionej CI_DB_active_record :: _ compile_select() od –

+0

Rzecz profilera nie jest dla mnie dobra, nie pokazuje zapytania, które chcę, jest zbyt skomplikowane, aby uzyskać kod SQL ... Działa to dla mnie: - echo $ this-> EE-> db -> _ compile_select(); –

+0

W CI3 użyj zamiast tego '$ this-> db-> get_compiled_select()'. –

6

Jest nowy sposób publicznego get_compiled_select że można drukować kwerendy przed uruchomieniem. _compile_select jest teraz chroniony, dlatego nie można go używać.

echo $this->db->get_compiled_select(); // before $this->db->get(); 
+4

Błąd krytyczny: wywołanie niezdefiniowanej metody CI_DB_mysql_driver :: get_compiled_select() – itskawsar

2

Ani last_query() lub get_compiled_select() pracuje dla mnie, więc niewielka zmiana kodu Pedro pracuje dla mnie dobrze. Nie obejmują ->get() w swojej produkcji, to musi być przed -> get()

echo $this->EE->db->_compile_select(); 
1

Spróbuję odpowiedzieć @ Chumillas za odpowiedź i @ chhameed, ale to nie działa, ponieważ SQL jest wrong.So znalazłem nowe podejście, tak:

  • Insert echo $sql; flush(); exit; się przed return $sql; _compile_select funkcją DB_active_rec.php
10

Po bezskutecznym próbowaniu użycia _compiled_select() lub get_compiled_select() właśnie wydrukowałem obiekt db i tam można zobaczyć zapytanie w jego właściwości queries.

Spróbuj to sam:

var_dump($this->db); 

Jeśli wiesz, że masz tylko jedno zapytanie, można go wydrukować bezpośrednio:

echo $this->db->queries[0]; 
+1

Tak, działa :) – shail

+0

Tak proste, nawet dziecko może to zrobić! – TARKUS

0

czytam wszystkie odpowiedzi tutaj, ale nie może dostać

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

do pracy, Dało mi to błąd,

Call to protected method CI_DB_active_record::_compile_select() from context 'Welcome'in controllers on line xx

Więc usunąłem protected z poniższej linii z pliku \system\database\DB_active_rec.php i to działało

protected function _compile_select($select_override = FALSE) 
+2

To bardzo zły pomysł na modyfikowanie plików frameworka. – Sachem

9

można po prostu użyć tego na końcu ..

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

jeśli potrzebujesz szybkiego testu na twoje zapytanie, to działa dla mnie dobrze

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

Miałem dokładnie ten sam problem i ostatecznie znalazł rozwiązanie. Moja kwerenda działa jak:

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

w celu wyświetlania polecenia SQL, wszystko, co musiałem zrobić, to utworzyć zmienną ($ resultstring) z dokładnie tej samej treści co mojej kwerendy, a następnie powtórzyć je w następujący sposób: <?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>

Działa!

-1

użyć get_compiled_select(), aby pobrać zapytanie zamiast go zastąpić

+0

Proponuję pokazać, jak korzystać z funkcji, którą proponujesz w tym konkretnym przypadku, nie wspominając o tym. Z poważaniem – YakovL