Comment puis-je afficher le contenu d'une déclaration préparée?
Je suis en train de travailler sur l'apprentissage de l'utilisation des requêtes préparées avec mysqli en PHP et en général, si j'ai un problème avec une requête je viens d'écho à l'écran pour voir à quoi il ressemble comme une première étape.
Comment puis-je faire avec une requête préparée?
J'aimerais voir l'instruction SQL d'après les variables sont remplacés.
source d'informationauteur Stomped
Vous devez vous connecter pour publier un commentaire.
En utilisant des requêtes préparées:
Il n'y a pas de "construction" d'une requête SQL sur le PHP côté, donc, il n'y a aucun moyen de réellement obtenir cette requête.
Ce qui signifie que si vous voulez voir une requête SQL, vous avez à utiliser, bien, les requêtes SQL, et non préparées.
Donc, à des fins de débogage actif de la journal général et de garder un œil sur ce fichier.
edit: ah, la question a un [mysqli] balise... complètement négligée.
Si l'instruction n'est pas exécutée du tout avez-vous (double/triple) vérifier qu'aucune erreur ne s'est produite le long de la voie?
J'ai l'habitude de le faire quand j'ai besoin de déboguer un prêt sql avec des paramètres.
Exemple de préparer et d'exécuter:
Le moyen facile de déboguer le code SQL obtenu de la phrase c'est:
Vous avez seulement besoin de faire un printf, en remplacement de l' ? sur la chaîne SQL par un %s. printf va interpréter comme une chaîne de caractères, en prenant chaque paramètre en la plaçant sur chaque remplacé %s.
D'accord avec Pascal MARTIN (+1) donc je suggère une autre technique pour le débogage:
var_dump()
ou connectez-vous chaque variable que vous insérez dans la déclaration, de cette façon, vous devriez être en mesure de comprendre si il est faux de données ou logiquement mal SQL.J'ai récemment mis à jour ce projet afin d'y inclure compositeur de l'intégration, de tests unitaires et de mieux gérer l'acceptation des arguments par référence (ce qui nécessite la mise à jour de php 5.6).
J'ai créé un ensemble de classes qui étendent la valeur par défaut
mysqli
etmysqli_stmt
classes pour vous permettre d'afficher un aperçu du potentiel de la chaîne de requête, qui doit fournir ce que vous cherchez:https://github.com/noahheck/E_mysqli
C'est une (à proximité) baisse-dans le remplacement pour vous normal
mysqli
objet qui renvoie une coutumemysqli_stmt
objet lorsque vousprepare()
la chaîne de requête. Après la liaison de vos paramètres,E_mysqli
vous permettra de visualiser la résultante de la chaîne de requête comme une nouvelle propriété de l'stmt
objet:dans
Il y a quelques mises en garde avec l'aide de cette extension (expliqué dans le README du projet github), mais pour le dépannage des domaines problématiques de votre application, ou la transition vers un style orienté objet de procédure, ce qui devrait fournir un niveau d'aide pour la plupart des utilisateurs.
Comme je l'ai indiqué dans le projet github, je n'ai pas d'expérience pratique à l'aide de la
mysqli
extension, et ce projet a été créé à la demande des utilisateurs de la sœur de projet, de sorte que tous les commentaires qui peuvent être fournis à partir de devs à l'aide de cette production serait grandement apprécié.Avertissement - Comme je l'ai dit, j'ai fait cette extension.
Vous pouvez utiliser l'outil comme Lottip. L'idée est d'agir comme un proxy MySQL. Il traite les paquets MySQL, extraits de la requête et c'est params de sorte que vous pouvez voir les instructions préparées avec son contenu.