La Doctrine - Comment imprimer le real sql, et pas seulement l'instruction préparée?
Nous sommes à l'aide de la Doctrine, un ORM PHP. Je suis entrain de créer une requête comme ceci:
$q = Doctrine_Query::create()->select('id')->from('MyTable');
puis dans la fonction, je suis en ajoutant dans diverses clauses where et les choses comme il convient, comme cela
$q->where('normalisedname = ? OR name = ?', array($string, $originalString));
Plus tard, avant de execute()
-ing que l'objet de requête, je veux imprimer le SQL brut afin de les examiner, et de le faire:
$q->getSQLQuery();
Toutefois que seuls les imprime l'instruction préparée, pas la requête complète. Je veux voir ce qu'il envoie à l'MySQL, mais c'est plutôt l'impression d'une déclaration préparée à l'avance, y compris ?
s'. Est-il possible de voir le "plein" de la requête?
- Le meilleur moyen que j'ai trouvé pour voir en plein requête est décrit dans cette réponse: stackoverflow.com/a/678310/229077
Vous devez vous connecter pour publier un commentaire.
Doctrine n'est pas de l'envoi d'un "réel requête SQL" pour le serveur de base de données : il est fait à l'aide de déclarations préparées à l'avance, ce qui signifie :
$query->getSql()
)$query->getParameters()
)Cela signifie qu'il n'ya jamais une "vraie" requête SQL sur le PHP côté — donc, la Doctrine ne peut pas l'afficher.
$query->getParameters();
ne seront PAS les paramètres de retour dans le bon ordre, tels qu'ils doivent apparaître dans l'instruction de la requête préparéeUn exemple..
Montrer SQL:
$sql=$query->getSQL();
Afficher Les Paramètres:
$parameters=$query->getParameters();
Vous pouvez vérifier la requête exécutée par votre application si vous vous connectez toutes les requêtes mysql:
http://dev.mysql.com/doc/refman/5.1/en/query-log.html
il n'y aura plus de questions pas seulement celui que vous cherchez, mais vous pouvez grep pour elle.
mais généralement
->getSql();
œuvresEdit:
pour afficher toutes les requêtes mysql j'utilise
et ajouter ces 2 lignes:
et redémarrer mysql
J'ai créé un Doctrine2 Enregistreur de frappe qui fait exactement cela. Il "hydrate" la paramétrées sql de la requête avec les valeurs à l'aide de Doctrine 2 propre type de données conversors.
Exemple D'Utilisation:;
La suite de la paix de code de l'écho sur la sortie standard toutes les INSERT,UPDATE,DELETE SQL phrases générées avec $em Entité Gestionnaire,
Il n'y a pas d'autre réel de requête, c'est la façon dont les requêtes préparées de travail. Les valeurs sont liés sur le serveur de base de données, pas dans la couche application.
Voir ma réponse à cette question: En PHP avec PDO, comment vérifier la finale de SQL paramétrées requête?
(Répété ici par commodité:)
getSqlQuery()
n'techniquement montre l'ensemble de la commande SQL, mais c'est beaucoup plus pratique lorsque vous pouvez voir les paramètres en tant que bien.Pour rendre ce modèle plus réutilisable, il y a une belle approche décrite dans le commentaires à SQL brut, de la Doctrine Objet de Requête.
Ma solution:
Exemple d'utilisation:
Vous pouvez facilement accéder aux paramètres SQL à l'aide de la méthode suivante.
Donc, si vous imprimez les
$param_values
et$col_names
, vous pouvez obtenir les valeurs des paramètres en passant par le sql et les noms de colonne.Remarque : Si
$param
retourne un tableau, vous devez ré itérer, en tant que paramètres à l'intérieur deIN (:?)
vient habituellement est comme un tableau imbriqué.Attendant, si vous avez trouvé une autre approche, veuillez avoir la gentillesse de partager avec nous 🙂
Merci!
Plus de solution claire:
Vous pouvez utiliser :
Si vous utilisez MySQL, vous pouvez utiliser le Workbench pour afficher l'exécution des instructions SQL.
Vous pouvez également utiliser la vue de l'exécution de la requête à partir de mysql en utilisant les éléments suivants :
Peut-être il peut être utile pour quelqu'un:
J'ai écrit un simple enregistreur, qui peut enregistrer des requêtes avec insérés les paramètres.
Installation:
Utilisation:
Pour imprimer une requête SQL dans la Doctrine, utilisation: