Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to debug MySQL/Doctrine2 Queries?

I am using MySQL with Zend Framework & Doctrine 2. I think even if you don't use Doctrine 2, you will be familiar with errors like

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

The problem is that I don't see the full query. Without an ORM framework, I could probably echo the sql easily, but with a framework, how can I find out what SQL its trying to execute? I narrowed the error down to

$progress = $task->getProgress(); 

$progress is declared

// Application\Models\Task /**  * @OneToMany(targetEntity="TaskProgress", mappedBy="task")  * @OrderBy({"seq" = "ASC"})  */ protected $progress; 

In MySQL, the task class looks like

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$$ 
like image 379
Jiew Meng Avatar asked Dec 31 '10 14:12

Jiew Meng


People also ask

How do I debug a MySQL query?

Go to localhost/phpmyadmin, find the database, and then click on the SQL tab. Find the database before following this step. Now, paste the output in the text area and then click on the 'Go' button. STEP 4: Error, the query is debugged, Check the 'MySQL said' part to know the error with the query.


1 Answers

Most simple solution for debugging queries in Doctrine 2:

$em->getConnection()   ->getConfiguration()   ->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger()) ; 
like image 116
beberlei Avatar answered Oct 01 '22 02:10

beberlei