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 構文にエラーがあります。1 行目の「like = 0」付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

エラーの根本的な原因を指摘することはできません。すべて問題ないように見えます。

助けてください。

前もって感謝します。

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補足として、値が外部から取得された場合クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用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 に答える