it-swarm.com.ru

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

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

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

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

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

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

89
Technupe

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

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

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

print_r($query);

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

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

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

84
Novo

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

$this->db->last_query();

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

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

224
chhameed

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

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

$this->db->_compile_select(); 

И после того, как это бежало:

$this->db->last_query(); 
37
pedro

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

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

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

Попробуй сам:

var_dump( $this->db );

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

echo $this->db->queries[0];
12
Christian Dechery

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

echo $this->db->last_query();
9
Muhammad Sadiq

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

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

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

 echo $this->EE->db->_compile_select();
2
Laurence Cope

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

Пример:

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

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

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

Результат();  

или же

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

1
1247p

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

  • Вставьте echo $sql; flush(); exit; в перед return $sql;_compile_select функцию DB_active_rec.php
1
Chanble

У меня была точно такая же проблема, и я нашел решение в конце концов. Мой запрос работает так:

$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 '; ?>

Оно работает!

0
Mark Janssen

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

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

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

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

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

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

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

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

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

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

Получить запрос ОБНОВЛЕНИЕ

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

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

$sql = $this->db->get_compiled_delete()
0
jedema