Comment déboguer MySQL/Doctrine2 Requêtes?
Je suis de l'utilisation de MySQL avec Zend Framework & Doctrine 2. Je pense que même si vous n'utilisez pas de Doctrine 2, vous serez familier avec des erreurs comme
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ASC' at line 1
Le problème est que je ne vois pas la totalité de la requête. Sans un ORM, je pourrais sans doute l'écho de la sql facilement, mais avec un cadre, comment puis-je savoir ce que SQL son en essayant de les exécuter? J'ai réduit l'erreur en bas à
$progress = $task->getProgress();
$progress
est déclaré
//Application\Models\Task
/**
* @OneToMany(targetEntity="TaskProgress", mappedBy="task")
* @OrderBy({"seq" = "ASC"})
*/
protected $progress;
Dans MySQL, le groupe de classe ressemble à
CREATE TABLE `tasks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`owner_id` int(11) DEFAULT NULL,
`assigned_id` int(11) DEFAULT NULL,
`list_id` int(11) DEFAULT NULL,
`name` varchar(60) NOT NULL,
`seq` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `tasks_owner_id_idx` (`owner_id`),
KEY `tasks_assigned_id_idx` (`assigned_id`),
KEY `tasks_list_id_idx` (`list_id`),
CONSTRAINT `tasks_ibfk_1` FOREIGN KEY (`owner_id`) REFERENCES `users` (`id`),
CONSTRAINT `tasks_ibfk_2` FOREIGN KEY (`assigned_id`) REFERENCES `users` (`id`),
CONSTRAINT `tasks_ibfk_3` FOREIGN KEY (`list_id`) REFERENCES `lists` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1$$
- Si vous avez une Doctrine, à la requête de l'objet, qui n'est pas clair dans le code que vous avez posté, vous pouvez exécuter
$query->getSqlQuery()
pour voir le SQL. Trouvez votre objet de requête dans votre code et de sortie pour voir ce qui se passe. Alternativement, vous pouvez activer la journalisation des requêtes en SQL pour voir ce que c'est.
Vous devez vous connecter pour publier un commentaire.
comment sur l'utilisation de mysql général journal de la requête?
--general_log=1 --general_log_file="..."
mais j'ai réussi à MySQL avecSET global general_log = 'ON'
Solution plus simple pour le débogage des requêtes dans la Doctrine 2:
Vous devez utiliser un DBAL SQLLogger. Vous pouvez utiliser la base SQL natif Enregistreur de \Doctrine\DBAL\Logging\EchoSQLLogger, ou vous pouvez mettre en œuvre le vôtre avec une interface de Doctrine\DBAL\Logging\SQLLogger.
De base de l'enregistreur, vous devez attacher le SQL Enregistreur à l'EntityManager. Donc, dans votre Doctrine fichier de bootstrap utilisation:
Noter que nous créons notre EntityManager de la $connectionParams tableau.
Important:. Si vous utilisez un DBAL de Connexion pour la création de votre EntityManager, vous devez le placer dans les deux cas, la DBAL de la Connexion et de l'ORM EntityManager. Par exemple, dans le Zend Framework,
Vous faites cela:
Utilisation Doctrine2 profiler + Firebug
https://github.com/mridgway/ZendX_Doctrine2/
J'ai écrit un article de blog sur ce sujet, certains des instructions pour la mise en place de profilage de Doctrine 2 dans le Zend Framework
ZFDebug est déjà très belle, et il y a une Doctrine 2 plugin pour ça
http://labs.ultravioletdesign.co.uk/profiling-doctrine-2-with-zend-framework/
Essayez d'utiliser un proxy Mysql entre vous et le serveur MySQL (http://forge.mysql.com/wiki/MySQL_Proxy). Ensuite, vous pouvez configurer ce proxy pour se connecter à toutes les demandes.
http://mysql.stu.edu.tw/tech-resources/articles/proxy-gettingstarted.html
Si votre développement dans ZF2 vous pouvez soit utiliser la solution ci-dessus posté par beberlei, si ce n'est l'écho de votre écran qui n'est pas exactement la meilleure pratique, mais utile.
ou vous pouvez utiliser ZendDeveloperTools qui affiche l'exécution de la requête dans la barre d'outils.
Peut-être devriez-vous utiliser un Zend_Db_Profile dans votre [développement] environnement.
Cela permettra d'enregistrer vos requêtes à l'exécution et d'autres informations.
Si vous avez une erreur du journal qui enregistre vos exceptions, tout peut être trouvé dans vos fichiers de log.
Voir ce lien: Zend Activer la journalisation des Requêtes SQL
Voir aussi cette Zend Framework Helper: https://github.com/jokkedk/ZFDebug