Как напечатать оператор SQL в модели codeigniter - PullRequest
97 голосов
/ 26 мая 2011

У меня есть SQL-оператор в моей модели,

Я тогда говорю

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

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

Мой запрос всегда терпит неудачу, как мне заставить php напечатать точный SQL-оператор, отправляемый моемубаза данных?И отобразить это на моем PHP-странице, страница

Ответы [ 14 ]

225 голосов
/ 27 мая 2011

Вы можете использовать это:

$this->db->last_query();

"Возвращает последний запрос, который был выполнен (строка запроса, а не результат)."

Рефф: https://www.codeigniter.com/userguide3/database/helpers.html

98 голосов
/ 26 мая 2011

Чтобы отобразить строку запроса:

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

Чтобы отобразить результат запроса:

print_r($query);

Класс Profiler отобразит результаты тестов, выполненные запросы и$ _POST данные внизу ваших страниц.Чтобы включить профилировщик, поместите следующую строку в любом месте методов вашего контроллера:

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

Руководство пользователя по профилированию: https://www.codeigniter.com/user_guide/general/profiling.html

39 голосов
/ 27 мая 2011

Вы можете отобразить сгенерированный ActiveRecord SQL:

Перед выполнением запроса:

$this->db->_compile_select(); 

И после его выполнения:

$this->db->last_query(); 
17 голосов
/ 13 января 2016

если вам нужен быстрый тест по вашему запросу, это прекрасно работает для меня

echo $this->db->last_query(); die;
12 голосов
/ 02 апреля 2014

После безуспешной попытки использования _compiled_select() или get_compiled_select() я просто распечатал объект db, и вы можете увидеть запрос там в свойстве queries.

Попробуйте сами:

var_dump( $this->db );

Если вы знаете, что у вас есть только один запрос, вы можете напечатать его напрямую:

echo $this->db->queries[0];
9 голосов
/ 01 августа 2015

Вы можете просто использовать это в конце ..

echo $this->db->last_query();
8 голосов
/ 16 мая 2013

Существует новый открытый метод get_compiled_select, который может распечатать запрос перед его выполнением._compile_select теперь защищен, поэтому не может быть использован.

echo $this->db->get_compiled_select(); // before $this->db->get();
2 голосов
/ 07 октября 2013

Ни last_query(), ни get_compiled_select() не работают для меня, так что небольшое изменение кода Педро работает для меня просто отлично.Не включайте ->get() в вашу сборку, это должно быть до -> get ()

 echo $this->EE->db->_compile_select();
1 голос
/ 26 октября 2013

Я пытаюсь ответить @ Chumillas и ответом @ chhameed, но это не сработает, потому что sql неверен. Так что я нашел новый подход, вот так:

  • Вставитьecho $sql; flush(); exit; в до return $sql; _compile_select функция DB_active_rec.php
0 голосов
/ 08 февраля 2019

У вас есть много способов получить SQL запросов.

После выполнения запроса

Вам следует использовать следующее:

$sql = $this->db->last_query(); 

Перед выполнением запроса (специальная инструкция SQLметоды)

CodeIgnitier не предоставляет универсального способа получить SQL перед выполнением, вы должны использовать определенный метод.

Получить запрос SELECT

$sql = $this->db->get_compiled_select()

ПолучитьЗапрос INSERT

$sql = $this->db->get_compiled_insert()

Получение запроса UPDATE

$sql = $this->db->get_compiled_update()

Получение запроса DELETE

$sql = $this->db->get_compiled_delete()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...