【发布时间】:2011-06-02 00:28:29
【问题描述】:
我正在使用 MySQL 和 Zend Framework & Doctrine 2。我想即使你不使用 Doctrine 2,你也会熟悉类似的错误
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
问题是我没有看到完整的查询。如果没有 ORM 框架,我可能可以轻松地回显 sql,但是有了框架,我如何找出它试图执行的 SQL?我将错误缩小到
$progress = $task->getProgress();
$progress 被声明
// Application\Models\Task
/**
* @OneToMany(targetEntity="TaskProgress", mappedBy="task")
* @OrderBy({"seq" = "ASC"})
*/
protected $progress;
在 MySQL 中,任务类看起来像
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$$
【问题讨论】:
-
如果你有一个Doctrine查询对象,在你贴的代码中不清楚,你可以运行
$query->getSqlQuery()查看SQL。在您的代码中找到您的查询对象并将其输出以查看发生了什么。或者,您可以在 SQL 中打开查询日志以查看它是什么。
标签: php mysql zend-framework doctrine-orm