2013-02-22 54 views
1

我被困在php/mysql錯誤,我無法跟蹤。 我的表user_like結構與樣本數據錯誤在同時選擇和更新在mysql

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; 

我正在成功獲取此值。 我正在做的是,如果像不存在意味着null然後插入像表中。 否則我只是用更新的方式來表示它的價值,如果它是零則一,反之亦然。 在這裏,我收到錯誤。 我的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選擇? 語法看起來不錯,但仍然顯示語法錯誤。

+0

請避免使用單 – 2013-02-22 06:30:20

+1

你正在使用MySQL保留名稱作爲列名,請表前綴名atr_like.like = 1 – Saqueib 2013-02-22 06:31:41

+0

真的感謝花費寶貴的時間。你讓你的工作變得簡單。 – 2013-02-22 07:24:45

回答

3

你正在使用MySQL保留關鍵字like

像子句用於指定模式在一列

什麼喜歡的是使用SQL簡單

expr LIKE pat [ESCAPE 'escape_char']

模式匹配正則表達式比較。返回1(TRUE)或0(FALSE)。如果expr或pat爲NULL,則結果爲NULL。

所以無論是使用反引號,因此會像列名都更將不使用保留的關鍵字作爲列名

Please, don't use mysql_* functions in new code。他們不再維護and are officially deprecated。瞭解prepared statements代替,並用PDOMySQLi

恕我直言,只使用PDO


也避免使用單中是否有

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

我沒有看到任何需要創建的變量$like你可以簡單echo $row['like'];

+1

+1之前寫給我.. – 2013-02-22 06:35:29

+0

感謝NullPointer。真的有用。當然,我會學習新的設計模式和編碼風格。 – 2013-02-22 07:25:36

+0

@mayurbhagat你的歡迎聲音不錯,你可以快速開始形式http://www.youtube.com/feed/UChgECUNwLBQkgeDcb44pMVg ...我看了,這些都很好..你也可以使用聊天..視頻的作者可以找到在聊天室..即使他是PHP聊天室的所有者之一 – 2013-02-22 07:28:11

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)"; 
+0

爲什麼downvote?解釋。 – 2013-02-22 06:32:02

+0

我沒有downvote,但也添加了'INSERT'語句在你的答案':D' – 2013-02-22 06:33:28

+3

+1我看到答案是正確的.SO,必須使用'down-vote'一個答案! – Vimalnath 2013-02-22 06:35:34

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)";