2012-01-10 115 views
-2

几周前我的代码一切正常,但最近我一直无法加载我的测试数据库在我的web应用程序(使用CakePhp构建)。无效的SQL语法错误

这是错误:

Warning (512): SQL Error: 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 ') LEFT JOIN blogs AS Blog ON (Song . blog_id = Blog . id) WHERE 1 = 1' at line 1 [CORE/cake/libs/model/datasources/dbo_source.php, line 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 

Warning (512): SQL Error: 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 ') WHERE 1 = 1 ORDER BY Song . postdate desc LIMIT 100' at line 1 [CORE/cake/libs/model/datasources/dbo_source.php, line 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 

回答

4

你没有条件的Library.userid列:

Library.user_id =) 

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

2

你的错误是在这里:

Library.user_id =) 

也许你想要将其更改为:

Library.user_id ='$user_id') 
1

看来,对于一些user_id价值没有被传递到查询:

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

可能的是,有一些PHP变量在这里失去了,或者PDO参数没有被正确绑定。

0
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 
0

既然这是一个CakePHP问题,我的答案将从框架的范式接近。但是,考虑到你的SQL输出,你要么不使用CakePHP,要么你正在做的事情绝对是一个不可否认的事情。

请发表您使用构建这条SQL语句和你LibraryhasMany关系Blog查找声明。除非您使用查询方法,否则我认为在使用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 
    ) 
);