1

トレースできないphp/mysqlエラーでスタックします。私のテーブルuser_like構造はサンプルデータを使用しています

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

0は嫌いを表し、1は好きを表します。これで、http://myhost.net/server/services/songlike.php?uid = 1& song_id = 1のようなphpを使用してテーブル にクエリを実行し、次のコードスニペットを使用してクエリの結果も取得しました。

$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を意味し、likeをテーブルに挿入することです。それ以外の場合は、更新によってその値を切り替えています。つまり、値が0の場合は1、その逆の場合です。ここでエラーが発生します。私の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.

以前のクエリのSQL選択に存在するレコードを更新できないのはmysqlの問題が原因ですか?構文は正常に見えますが、それでも構文エラーが表示されます。

4

3 に答える 3

3

mysql予約キーワードを使用していますlike

Like句は、列で指定されたパターンで使用されます

どんな感じですか

expr LIKE pat [ESCAPE 'escape_char']

SQLの単純な正規表現比較を使用したパターンマッチング。1(TRUE)または0(FALSE)を返します。exprまたはpatのいずれかがNULLの場合、結果はNULLになります。

したがって、バッククォートを使用して列名のように動作するようにします。そうでない場合は、列名として予約キーワードを使用しない方がよいでしょう。

mysql_*新しいコードで関数を使用しないでください。それらはもはや維持されておらず、公式に非推奨になっています。代わりにプリペアドステートメントについて学び、 PDOまたはMySQLiを使用してください

IMHOは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'";

likemysqlの予約語です。列に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 に答える