Как распечатать инструкцию SQL в модели codeigniter

У меня есть инструкция sql в моей модели,

Затем я говорю

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

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

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

Ответ 1

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

$this->db->last_query();    

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

print_r($query);

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

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

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

Ответ 3

Вы можете отобразить SQL Server ActiveRecord:

Перед запуском запроса:

$this->db->_compile_select(); 

И после его запуска:

$this->db->last_query(); 

Ответ 4

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

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

Ответ 5

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

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

var_dump( $this->db );

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

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

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

  • Вставьте echo $sql; flush(); exit; в return $sql; _compile_select функция DB_active_rec.php

Ответ 10

Добавьте эту строку сразу после запроса, который вы хотите распечатать.

Пример:

$ query = $this-> db-> query ('SELECT * FROM table WHERE условие');

//Добавить эту строку.

печати ($this-> db-> last_query());

выход();

или же

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

Ответ 11

У меня была точно такая же проблема и в конечном итоге нашел решение. Мой запрос выполняется следующим образом:

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

Чтобы отобразить команду sql, все, что мне нужно было сделать, это создать переменную ($ resultstring) с тем же содержимым, что и мой запрос, а затем повторить его следующим образом: <?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>

Это работает!

Ответ 12

Я прочитал все ответы здесь, но не могу получить

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

чтобы работать, он дал мне ошибку, например,

Вызов защищенного метода CI_DB_active_record:: _ compile_select() из контекста 'Welcome'in controller on line xx

Итак, я удалил protected из следующей строки из файла \system\database\DB_active_rec.php и работал

protected function _compile_select($select_override = FALSE)

Ответ 13

используйте get_compiled_select() для получения запроса вместо его замены