Ich verwende MySQL mit Zend Framework & Lehre 2. Ich denke, auch wenn Sie 2 Lehre nicht verwenden, werden Sie mit Fehlern wieWie debugge ich MySQL/Doctrine2 Abfragen?
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
Das Problem ist, dass ich vertraut sein Die vollständige Abfrage wird nicht angezeigt. Ohne ein ORM-Framework könnte ich den SQL-Code wahrscheinlich leicht widerspiegeln, aber mit einem Framework, wie kann ich herausfinden, was SQL versucht, auszuführen? Ich verengte den Fehler bis auf
$progress = $task->getProgress();
$progress
// Application\Models\Task
/**
* @OneToMany(targetEntity="TaskProgress", mappedBy="task")
* @OrderBy({"seq" = "ASC"})
*/
protected $progress;
In MySQL, die Task-Klasse sieht aus wie
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$$
Wenn Sie eine Lehre Query-Objekt haben, die in dem Code nicht klar ist, dass Sie gebucht haben, können Sie laufen '$ query-> getSqlQuery() 'um das SQL zu sehen. Suchen Sie Ihr Abfrageobjekt in Ihrem Code und geben Sie es aus, um zu sehen, was gerade passiert. Alternativ können Sie die Abfrageprotokollierung in SQL aktivieren, um zu sehen, was es ist. – thetaiko