У меня есть инструкция sql в моей модели,
Я тогда говорю
$query = $this->db->query($sql, array(fields, fields1); if ($query) { return true: } else { echo "failed"; return false; }
Мой запрос всегда терпит неудачу, как мне получить php для печати точного оператора sql, отправляемого в мою базу данных? И покажите, что на моем php-представлении, страница
print_r($query);
Вы также можете использовать (в представлении), и вы увидите инструкцию SQL:
$this->output->enable_profiler(TRUE);
Профилирование руководства пользователя: http://ellislab.com/codeigniter/user-guide/general/profiling.html
Вы можете использовать это:
$this->db->last_query();
«Возвращает последний запрошенный запрос (строка запроса, а не результат)».
Reff: https://www.codeigniter.com/userguide3/database/helpers.html
Вы можете отобразить созданный ActiveRecord SQL:
Перед запуском запроса:
$this->db->_compile_select();
И после того, как он запустил:
$this->db->last_query();
если вам нужен быстрый тест по вашему запросу, это отлично работает для меня
echo $this->db->last_query(); die;
После попытки без успеха использовать _compiled_select()
или get_compiled_select()
я просто напечатал объект db
, и вы можете увидеть запрос там в свойстве queries
.
Попробуй сам:
var_dump( $this->db );
Если вы знаете, что у вас есть только один запрос, вы можете распечатать его напрямую:
echo $this->db->queries[0];
Вы можете просто использовать это в конце.
echo $this->db->last_query();
Существует новый открытый метод get_compiled_select
который может распечатать запрос перед его запуском. _compile_select
теперь защищен, поэтому его нельзя использовать.
echo $this->db->get_compiled_select(); // before $this->db->get();
Ни last_query()
ни get_compiled_select()
работают для меня, поэтому небольшое изменение кода Pedro для меня очень хорошо работает. Не включайте ->get()
в свою сборку, это должно быть до -> get ()
echo $this->EE->db->_compile_select();
Я пытаюсь ответить @ Chumillas и ответ @ chhameed, но он не работает, потому что sql ошибочен. Поэтому я нашел новый подход, например:
echo $sql; flush(); exit;
echo $sql; flush(); exit;
перед return $sql;
_compile_select
функция DB_active_rec.php
Я читал все ответы здесь, но не могу получить
echo $this->db->get_compiled_select();
работать, Это дало мне ошибку,
Вызовите защищенный метод CI_DB_active_record :: _ compile_select () из контекста 'Welcome'in-контроллеры в строке xx
Таким образом, я удалил protected
из ниже строки файл \system\database\DB_active_rec.php
и он работал
protected function _compile_select($select_override = FALSE)
У меня была точно такая же проблема, и я нашел решение в конце концов. Мой запрос выполняется так:
$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 '; ?>
<?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>
Оно работает!