几周前我的代码还不错,但最近我无法在我的web应用程序上加载我的测试数据库(使用CakePhp构建)。
这就是错误:
警告(512):SQL错误:1064:您的SQL语法有错误;查看与MySQL服务器版本对应的手册在'附近使用的正确语法)LEFT JOIN
blogs
ASBlog
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
Song
。postdate
第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语句以及您的Library
的hasMany
与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
)
);