Eu tenho uma instrução sql em meu modelo,
Então eu digo
$query = $this->db->query($sql, array(fields, fields1);
if ($query) {
return true:
} else {
echo "failed";
return false;
}
Minha consulta sempre falha, como faço para que o php imprima a instrução sql exata que está sendo enviada ao meu banco de dados? E exibir isso na minha visualização de php, página
php
sql
codeigniter
Technupe
fonte
fonte
Você pode usar isto:
"Retorna a última consulta executada (a string de consulta, não o resultado)."
Reff: https://www.codeigniter.com/userguide3/database/helpers.html
fonte
Você pode exibir o SQL gerado pelo ActiveRecord:
Antes da execução da consulta:
E depois de executado:
fonte
$this->db->get_compiled_select()
vez disso.se você precisar de um teste rápido em sua consulta, isso funciona muito bem para mim
fonte
Depois de tentar sem sucesso usar
_compiled_select()
ouget_compiled_select()
acabei de imprimir odb
objeto, e você pode ver a consulta aí naqueries
propriedade.Tente você mesmo:
Se você sabe que tem apenas uma consulta, pode imprimi-la diretamente:
fonte
Existe um novo método público
get_compiled_select
que pode imprimir a consulta antes de executá-la._compile_select
agora está protegido, portanto, não pode ser usado.fonte
Você pode simplesmente usar isso no final.
fonte
Nem
last_query()
ouget_compiled_select()
funciona para mim, então uma ligeira mudança no código de Pedro funciona perfeitamente para mim. Não inclua->get()
em sua construção, isso deve ser antes de -> get ()fonte
Tento a resposta de @chumillas e a resposta de @chhameed, mas não funciona, porque o sql está errado. Então encontrei uma nova abordagem, como esta:
echo $sql; flush(); exit;
antes dareturn $sql;
_compile_select
função deDB_active_rec.php
fonte
Adicione esta linha logo após a consulta que deseja imprimir.
Exemplo:
$ query = $ this-> db-> query ('SELECT * FROM table WHERE condition');
// Adicione esta linha.
var_dump ($ this-> db-> last_query ());
Saída();
ou
echo $ this-> db-> last_query ();
fonte
Estou usando xdebug para observar esses valores em VSCode com a respectiva extensão e CI v2.x. Eu adiciono a expressão
$this->db->last_query()
na seção de observação e adiciono umxdebugSettings
nó como essas linhas para obter o valor não truncado no launch.json.E execute meu depurador com o ponto de interrupção e, finalmente, selecione minha expressão e clique com o botão direito> copiar valor.
fonte
Eu tive exatamente o mesmo problema e eventualmente encontrei a solução. Minha consulta funciona assim:
Para exibir o comando sql, tudo o que tive que fazer foi criar uma variável ($ resultstring) com exatamente o mesmo conteúdo da minha consulta e, em seguida, ecoá-la, assim:
<?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>
Funciona!
fonte
use
get_compiled_select()
para recuperar a consulta em vez de substituí-lafonte
Eu li todas as respostas aqui, mas não consigo
para trabalhar, me deu um erro como,
Então, eu removi
protected
da linha abaixo do arquivo\system\database\DB_active_rec.php
e funcionoufonte