2012-01-10 20 views
-2

私のコードはすべて問題なく、最近私は(CakePhpを使用して構築された)Webアプリケーションでテストデータベースを読み込めませんでした。無効な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ステートメントのビルドを使用しているFindステートメントと、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 
    ) 
);