J'ai une déclaration SQL dans mon modèle,
Je dis alors
$query = $this->db->query($sql, array(fields, fields1);
if ($query) {
return true:
} else {
echo "failed";
return false;
}
Ma requête échoue toujours. Comment php peut-il imprimer la déclaration SQL exacte envoyée à ma base de données? Et afficher que sur ma vue php, page
Pour afficher la chaîne de requête:
print_r($this->db->last_query());
Pour afficher le résultat de la requête:
print_r($query);
La classe de profileur affiche les résultats du test de performance, les requêtes que vous avez exécutées et les données $ _POST au bas de vos pages .
$this->output->enable_profiler(TRUE);
Profilage de l'utilisateur: https://www.codeigniter.com/user_guide/general/profiling.html
Vous pouvez utiliser ceci:
$this->db->last_query();
"Retourne la dernière requête exécutée (la chaîne de requête, pas le résultat)."
Reff: https://www.codeigniter.com/userguide3/database/helpers.html
Vous pouvez afficher le code SQL généré par ActiveRecord:
Avant que la requête ne s'exécute:
$this->db->_compile_select();
Et après avoir couru:
$this->db->last_query();
si vous avez besoin d'un test rapide sur votre requête, cela fonctionne très bien pour moi
echo $this->db->last_query(); die;
Après avoir essayé sans succès d'utiliser _compiled_select()
ou get_compiled_select()
, je viens d'imprimer l'objet db
et vous pouvez voir la requête dans la propriété queries
.
Essayez vous-même:
var_dump( $this->db );
Si vous savez que vous n'avez qu'une seule requête, vous pouvez l'imprimer directement:
echo $this->db->queries[0];
Vous pouvez simplement l'utiliser à la fin.
echo $this->db->last_query();
Il existe une nouvelle méthode publique get_compiled_select
qui peut imprimer la requête avant de l'exécuter. _compile_select
est maintenant protégé et ne peut donc pas être utilisé.
echo $this->db->get_compiled_select(); // before $this->db->get();
last_query()
et get_compiled_select()
ne fonctionnent pas pour moi, donc un léger changement du code de pedro me convient parfaitement. N'incluez pas ->get()
dans votre construction, cela doit être avant le -> get ()
echo $this->EE->db->_compile_select();
Ajoutez cette ligne juste après la requête que vous souhaitez imprimer.
Exemple:
$ query = $ this-> db-> query ('SELECT * FROM table WHERE condition');
// Ajoute cette ligne.
print ($ this-> db-> last_query ());
sortie();
ou
echo $ this-> db-> last_query ();
J'essaie de répondre @ la réponse de Chumillas et la réponse de @ chhameed, mais cela ne fonctionne pas, car le sql est faux.Alors j'ai trouvé une nouvelle approche, comme ceci:
echo $sql; flush(); exit;
dans avant return $sql;
_compile_select
fonction de DB_active_rec.php
J'ai eu exactement le même problème et j'ai finalement trouvé la solution. Ma requête est la suivante:
$result = mysqli_query($link,'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC ');
Pour afficher la commande sql, tout ce que je devais faire était de créer une variable ($ resultstring) avec exactement le même contenu que ma requête, puis de l'exécuter comme ceci: <?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>
Ça marche!
Vous avez plusieurs façons d’obtenir du SQL dans les requêtes.
Vous devriez utiliser ce qui suit:
$sql = $this->db->last_query();
CodeIgnitier ne fournit pas de méthode généraliste pour obtenir le code SQL avant l'exécution, vous devez utiliser une méthode spécifique.
$sql = $this->db->get_compiled_select()
$sql = $this->db->get_compiled_insert()
$sql = $this->db->get_compiled_update()
$sql = $this->db->get_compiled_delete()