1

我陷入无法追踪的 php/mysql 错误。我的表 user_like 结构包含示例数据

id user_id song_id like
1  1       1        1
2  1       2        0

0代表不喜欢,1代表喜欢。现在我已经使用 php 查询表,例如 http://myhost.net/server/services/songlike.php?uid=1&song_id=1 并且我在使用以下代码段的查询中也得到了类似的结果。

$query="select * from atr_like  where user_id='$uid' and song_id='$songid' limit 1 ";
$rs = mysql_query($query);
$row = mysql_fetch_assoc($rs);
print_r($row);
echo "<br>";
$like=$row['like'];
echo $like; 

我成功地得到了这个值。我正在做的是,如果 like 不存在意味着 null 然后在 table 中插入 like。否则我只是通过更新来切换它的值,如果它是零然后是一,反之亦然。在这里我收到错误。我的 PHP 代码是

     if(mysql_num_rows($rs) > 0 && $like!=null)
        {
    if($like==1)
    {
    // "user has liked it already so dislike it update like to 0 ";
    $query1="update  atr_like set like=0 where user_id='$uid' and song_id='$songid'";
    }   
    else
    {
    //"user has disliked it previously already so  update like to 1 ";
    $query1="update  atr_like set like=1 where user_id='$uid' and song_id='$songid'";
    }

        }
        else
        {
        echo "first time so insert record . user is going to like";
        $query1="insert into  atr_like   (user_id,song_id,like) values ('$uid','$songid',1)";
        }
$rs1 = mysql_query($query1)or  die(mysql_error());
mysql_close($conn);

错误信息是:

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 'like=1 where user_id='1' and song_id='1375'' at line 1.

是否由于 mysql 问题,您无法更新先前查询的 sql 选择中存在的任何记录?语法看起来不错,但仍然显示语法错误。

4

3 回答 3

3

您正在使用 mysql 保留关键字like

Like 子句在列中使用指定模式

喜欢的是

expr LIKE pat [ESCAPE 'escape_char']

模式匹配使用 SQL 简单的正则表达式比较。返回 1 (TRUE) 或 0 (FALSE)。如果 expr 或 pat 为 NULL,则结果为 NULL。

所以要么使用反引号,所以它的行为就像列名,否则最好不要使用保留关键字作为列名

请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。改为了解准备好的语句,并使用PDOMySQLi

恕我直言,仅使用 PDO


如果有,也避免使用单例

$like=$row['like'];
echo $like; 

我认为不需要创建变量$like,您可以简单地echo $row['like'];

于 2013-02-22T06:33:40.463 回答
2

更改您的查询

$query1="update  atr_like set like=0 where user_id='$uid' and song_id='$songid'";

$query1="update  atr_like set `like`=0 where user_id='$uid' and song_id='$songid'";

like是mysql中的保留字。如果您将列命名为与 mysql 的保留字相同,则必须使用反引号作为列名。

也改变这个查询。

$query1="insert into  atr_like   (`user_id`,`song_id`,`like`) values ('$uid','$songid',1)";
于 2013-02-22T06:30:23.897 回答
0

尝试

$query1 = "update atr_like set `like` = 0 where user_id = '".$uid."' and song_id = '".$songid."'";

用于插入

$query1 = "insert into atr_like (user_id,song_id,`like`) values ('".$uid."','".$songid."',1)";
于 2013-02-22T06:34:07.857 回答