查询中的mysql语法错误

时间:2014-06-18 01:33:17

标签: php mysql sql syntax

我收到错误查询失败:您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在第5行的“5,7,6,9,13 ORDER BY n.date DESC”附近使用正确的语法。任何人都可以指出什么是错的?感谢

$news_query = 'SELECT u.id as userId, u.username, n.id as newsId, n.action, n.date 
            FROM newsfeed as n 
            JOIN users as u on n.userId = u.id
            WHERE
            userId in '.implode(',', array_map('intval', $myfriends)).' &&   
            userId == :myId             // posts by me
            ORDER BY n.date DESC
        ';

2 个答案:

答案 0 :(得分:5)

比较运算符:

 userId == :myId

在SQL中,相等运算符为=,而不是==

从错误消息中可以看出,当值插入查询时,上面的代码段如下所示:

userId == 5,7,6,9,13

即使您使用了正确的运算符,这也不是有效的比较。如果您想将userId与值列表进行比较,那么您应该使用IN运算符和元组(一组值):

userId IN (5,7,6,9,13)

对评论的回应

您可以将代码更改为:

$tuple = implode(',', array_map('intval', $myfriends));
$news_query = <<< SQL
    SELECT
        u.id AS userId,
        u.username,
        n.id AS newsId,
        n.action,
        n.date 
    FROM
        newsfeed AS n 
    JOIN
        users AS u ON n.userId = u.id
    WHERE
        userId IN ($tuple) AND
        userId = :myId
    ORDER BY
        n.date DESC
SQL;

您还应该在userId子句中限定WHERE字段;即将u.n.放在它前面,这样就没有歧义。

答案 1 :(得分:2)

将您的列表包含在括号中:

WHERE userId in ('.implode(',', array_map('intval', $myfriends)).') &&
                ^ here                                            ^ and here

并在下一行用==替换=(感谢jeroen选择此内容)

userId = :myId 
       ^ here