2

我正在使用表格user_like来保存用户喜欢的点击。

表结构如下。

id  user_id     song_id     like
--------------------------------
67    2           148         0

所有列数据类型为int(11).

$song_id=$_GET['song_id'];
$query="select * from atr_like WHERE song_id = '$song_id' and like = 0";
$rs = mysql_query($query) or
die(mysql_error());
echo mysql_num_rows($rs);

我收到以下错误。

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“like = 0”附近使用正确的语法。

我无法指出错误的根本原因是它看起来一切正常。

请帮忙。

提前致谢。

4

2 回答 2

10

LIKE是保留关键字。你可以用反引号来逃避它。

SELECT  * 
FROM    atr_like 
WHERE   song_id = '$song_id' and 
        `like` = 0

另一种方法是在表上提供别名,例如

SELECT  a.* 
FROM    atr_like a
WHERE   a.song_id = '$song_id' and 
        a.like = 0

其他来源

如果您有时间更改它,请不要使用保留关键字列表中的 tablename 或 columnname。以后会给你这样的脖子疼。

作为旁注,SQL Injection如果值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-01-18T08:44:28.027 回答
1

LIKE是保留关键字。不要以此命名你的列。

http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

于 2013-01-18T08:44:59.227 回答