Как распечатать инструкцию 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
Ответ 2
Вы можете использовать это:
$this->db->last_query();
"Возвращает последний запрошенный запрос (строка запроса, а не результат).
Reff: https://www.codeigniter.com/userguide3/database/helpers.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()
для получения запроса вместо его замены