Неверный синтаксис SQL - PullRequest
0 голосов
/ 10 января 2012

Несколько недель назад мой код был в порядке, но недавно я не смог загрузить свою тестовую базу данных в мое веб-приложение (созданное с использованием CakePhp).

Это ошибка:

Предупреждение (512): ошибка SQL: 1064: в синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '). LEFT JOIN blogs AS Blog ON (Song. blog_id = Blog. id) WHERE 1 = 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 desc LIMIT 100' в строке 1 [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 

Ответы [ 5 ]

4 голосов
/ 10 января 2012

У вас нет условия для столбца Library.userid:

Library.user_id =)

Вам необходимо указать значение справа от знака равенства!

2 голосов
/ 10 января 2012

ваша ошибка здесь:

Library.user_id =)

возможно, вы хотите изменить его на:

Library.user_id ='$user_id')
1 голос
/ 10 января 2012

Похоже, что некоторое значение для user_id не передается в запрос:

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

Вероятно, здесь отсутствует какая-то переменная PHP или параметр PDO неправильно привязан.

0 голосов
/ 11 января 2012

Так как это вопрос CakePHP, мой ответ будет подходить из парадигм фреймворка.Однако, учитывая ваш вывод SQL, вы либо НЕ используете CakePHP, либо делаете что-то, что определенно запрещено.

Пожалуйста, опубликуйте оператор Find, который вы используете для сборки этого оператора SQL, и ваш Library hasMany отношение к Blog.Если вы не используете метод запроса, я думаю, что вы получите ошибку PHP, прежде чем сможете создать оператор SQL такого типа, используя соглашения поиска CakePHP.Если вы используете метод query для поиска ваших данных, то не делайте этого.Это простой запрос, который можно легко выполнить с помощью CakePHP find.

Ваша модель библиотеки должна выглядеть следующим образом:

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
    )
);
0 голосов
/ 10 января 2012
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...