我收到错误查询失败:您的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
';
答案 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