我寫了一個自定義查詢在CakePHP的1.3要使用的查詢如下:CakePHP的1.3查詢方法給出SQL 1064錯誤
SELECT artists.id, artists.name, artists.image_id, genres.genre
FROM artists
LEFT JOIN coupling_artist_genre
ON artists.id = coupling_artist_genre.id_in
LEFT JOIN genres
ON coupling_artist_genre.id_out = genres.id
WHERE artists.name LIKE '%tee%'
AND genres.id IN (12,14)
ORDER BY artists.name ASC
LIMIT 0,25
當我把這個像這樣:
$this -> Artist -> query ($sql);
我得到這個錯誤:
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 '
但是,當我複製生成的查詢並將其粘貼到PHPMyAdmin它工作正常。沒有警告,沒有錯誤,最重要的是:我期望的結果。
有誰知道可能會導致Cake和PMA之間的這種差異?
編輯:這是查詢是如何產生的:
$query = "SELECT artists.id, artists.name, artists.image_id";
if ($genres != ' ' && strlen ($genres) > 0)
{
$query .= ", genres.genre";
}
$query .= " FROM artists";
if ($genres != ' ' && strlen ($genres) > 0)
{
$query .= " LEFT JOIN coupling_artist_genre ON artists.id = coupling_artist_genre.id_in";
$query .= " LEFT JOIN genres ON coupling_artist_genre.id_out = genres.id";
}
$query .= " WHERE";
if ($searchString != '' && strlen ($searchString) > 0)
{
$searchString = $searchString == ' ' ? '' : $searchString;
$query .= " artists.name LIKE '%".$searchString."%'";
}
if ($searchString != ' ' && strlen ($searchString) > 0 && $genres != ' ' && strlen ($genres) > 0)
{
$query .= " AND";
}
if ($genres != ' ' && strlen ($genres) > 0)
{
$query .= " genres.id IN (".$genres.")";
}
$query .= " ORDER BY artists.name ASC LIMIT " . ($page - 1) * 25 . ",25";
$this -> set ('artists', $this -> Artist -> query ($query));
你可以把你如何生成$ sql var? – raultm 2011-06-06 15:07:10
是的,看我的編輯:) – lunanoko 2011-06-06 15:13:00
你應該真的使用這個查詢的內置查找方法,它會工作正常,如果你有正確的關係設置,它看起來並不複雜。 – Dunhamzzz 2011-06-06 15:24:58