Mam w modelu instrukcję sql,
Wtedy mówię
$query = $this->db->query($sql, array(fields, fields1);
if ($query) {
return true:
} else {
echo "failed";
return false;
}
Moje zapytanie zawsze kończy się niepowodzeniem, jak mam skłonić php do wydrukowania dokładnej instrukcji sql wysyłanej do mojej bazy danych? I wyświetl to w moim widoku php, stronie
php
sql
codeigniter
Technupe
źródło
źródło
Możesz użyć tego:
„Zwraca ostatnie uruchomione zapytanie (ciąg zapytania, a nie wynik)”.
Odn .: https://www.codeigniter.com/userguide3/database/helpers.html
źródło
Możesz wyświetlić SQL wygenerowany przez ActiveRecord:
Przed uruchomieniem zapytania:
A po uruchomieniu:
źródło
$this->db->get_compiled_select()
zamiast tego.jeśli potrzebujesz szybkiego testu swojego zapytania, to działa świetnie
źródło
Po bezskutecznej próbie użycia
_compiled_select()
lubget_compiled_select()
po prostu wydrukowałemdb
obiekt i możesz zobaczyć zapytanie tam wequeries
właściwości.Spróbuj sam:
Jeśli wiesz, że masz tylko jedno zapytanie, możesz je wydrukować bezpośrednio:
źródło
Istnieje nowa metoda publiczna,
get_compiled_select
która może wydrukować zapytanie przed jego uruchomieniem._compile_select
jest teraz chroniony, dlatego nie można go używać.źródło
Możesz po prostu użyć tego na końcu.
źródło
Ani jedno,
last_query()
aniget_compiled_select()
drugie dla mnie działa, więc niewielka zmiana w kodzie pedro działa dla mnie dobrze. Nie uwzględniaj->get()
w swojej kompilacji, musi to nastąpić przed -> get ()źródło
Próbuję odpowiedzieć @ Chumillas i @ chhameed, ale to nie działa, ponieważ sql jest błędne, więc znalazłem nowe podejście, takie jak to:
echo $sql; flush(); exit;
przedreturn $sql;
_compile_select
funkcjąDB_active_rec.php
źródło
Dodaj tę linię zaraz po zapytaniu, które chcesz wydrukować.
Przykład:
$ query = $ this-> db-> query ('SELECT * FROM table WHERE condition');
// Dodaj tę linię.
var_dump ($ this-> db-> last_query ());
wyjście();
lub
echo $ this-> db-> last_query ();
źródło
Używam xdebug do oglądania tych wartości w VSCode z odpowiednim rozszerzeniem i CI v2.x. Dodaję wyrażenie
$this->db->last_query()
w sekcji obserwacyjnej i dodajęxdebugSettings
węzeł, taki jak te linie, aby uzyskać wartość nieobciętą w launch.json.I uruchom mój debuger z punktem przerwania, a na koniec po prostu wybierz moje wyrażenie i kliknij prawym przyciskiem myszy> skopiuj wartość.
źródło
Miałem dokładnie ten sam problem i ostatecznie znalazłem rozwiązanie. Moje zapytanie wygląda następująco:
Aby wyświetlić polecenie sql, wszystko, co musiałem zrobić, to utworzyć zmienną ($ resultstring) o dokładnie takiej samej treści jak moje zapytanie, a następnie powtórzyć ją, na przykład:
<?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>
To działa!
źródło
służy
get_compiled_select()
do pobierania zapytania zamiast go zastępowaćźródło
Przeczytałem tutaj wszystkie odpowiedzi, ale nie mogę
do pracy, dało mi to błąd w stylu,
Więc usunąłem
protected
z poniższej linii z pliku\system\database\DB_active_rec.php
i zadziałałoźródło