无效的SQL语法错误


Invalid SQL Syntax error

几周前我的代码还不错,但最近我无法在我的web应用程序上加载我的测试数据库(使用CakePhp构建)。

这就是错误:

警告(512):SQL错误:1064:您的SQL语法有错误;查看与MySQL服务器版本对应的手册在'附近使用的正确语法)LEFT JOIN blogs AS Blog ON(Song.blog_id=Blog.id)第1行WHERE 1=1'[CORE/cake/libs/model/datasources/dbo_source.php,684行]

SELECT COUNT(*) AS `count`
FROM `songs` AS `Song` 
LEFT JOIN libraries AS `Library` ON (`Song`.`id` = `Library`.`song_id` AND `Library`.`user_id` =) 
LEFT JOIN `blogs` AS `Blog` ON (`Song`.`blog_id` = `Blog`.`id`) 
WHERE 1 = 1

警告(512):SQL错误:1064:您的SQL语法有错误;查看与MySQL服务器版本对应的手册在'附近使用的正确语法)WHERE 1=1 ORDER BY Songpostdate第1行desc LIMIT 100'[CORE/cake/libs/model/datasources/dbo_source.php,684行]

SELECT *, Blog.id 
FROM `songs` AS `Song` 
LEFT JOIN libraries AS `Library` ON (`Song`.`id` = `Library`.`song_id` AND `Library`.`user_id` =) 
WHERE 1 = 1 
ORDER BY `Song`.`postdate` DESC
LIMIT 100 

您没有Library.userid列的条件:

Library.user_id =)

您需要在等号的右侧指定一个值!

您的错误在这里:

Library.user_id =)

也许你想把它改成:

Library.user_id ='$user_id')

似乎user_id的某些值没有传递到查询中:

`Library`.`user_id` =)
//-----------------^^^^

这里可能缺少一些PHP变量,或者没有正确绑定PDO参数。

SELECT COUNT(*) AS `count` FROM `songs` AS `Song` 
left JOIN libraries AS `Library` 
ON (`Song`.`id` = `Library`.`song_id` AND `Library`.`user_id` =) <-- HERE's something missing
LEFT JOIN `blogs` AS `Blog` ON (`Song`.`blog_id` = `Blog`.`id`) WHERE 1 = 1
SELECT *, 
Blog.id FROM `songs` AS `Song` left JOIN libraries AS `Library` 
ON (`Song`.`id` = `Library`.`song_id` AND `Library`.`user_id` =) <-- HERE's something missing
WHERE 1 = 1 ORDER BY `Song`.`postdate` desc LIMIT 100

由于这是一个CakePHP问题,我的答案将从框架的范例中得出。然而,考虑到您的SQL输出,您要么没有使用CakePHP,要么正在做一些绝对不允许的事情。

请发布您正在使用的Find语句来构建此SQL语句以及您的LibraryhasManyBlog的关系。除非您使用的是查询方法,否则我认为在使用CakePHP查找约定构建这种类型的SQL语句之前,您会遇到PHP错误。如果您使用query方法查找数据,则不要使用。这是一个简单的查询,可以使用CakePHP轻松查找。

你的图书馆模型应该像:

public $hasMany => array('Blog');

发现:

$this->Library->find(
    'all',
    array(
        'conditions' => array(
            '1' => 1 //Not sure why you have Where 1=1
        )
        'order' => "Library.name DESC",
        'limit' => 100
    )
);