我编写了一个在CakePHP 1.3中使用的自定义查询。查询如下:
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));
答案 0 :(得分:0)
我认为您的查询最终会出现这样的情况:
" ...
WHERE
ORDER BY ... "
或
" ...
WHERE artists.name LIKE '%tee%'
AND
ORDER BY ... "
试试这个:
$query .= " WHERE True ";
if ($searchString != '' && strlen ($searchString) > 0)
{
$searchString = $searchString == ' ' ? '' : $searchString;
$query .= " AND artists.name LIKE '%".$searchString."%'";
}
if ($genres != ' ' && strlen ($genres) > 0)
{
$query .= " AND genres.id IN (".$genres.")";
}
$query .= " ORDER BY artists.name ASC LIMIT " . ($page - 1) * 25 . ",25";
$this -> set ('artists', $this -> Artist -> query ($query));
答案 1 :(得分:0)
试图早些时候发布,但我不能没有100声望。无论如何,这是我之前试图发布的答案:
亲爱的访问者提出这个问题。我非常抱歉(特别是对你们来说,因为你花时间思考并回答我的问题!)。
我刚刚发现我犯了一个非常愚蠢的错误。在我的控制器中,在一个完全不同的方法中,甚至不应该执行我在die()调用中有另一个查询。那是MySQL抱怨的查询。我从来没有想到它会被执行但是唉,这是导致我的错误的查询。看到我不再需要它了,我删除了它,我的错误消失了。
对于那些把时间放在这个问题上的人,我再次感到抱歉。我将来会尽量小心!