2012-03-07 90 views
0

奇怪的事情我有一個奇怪的mysql-事情會在這裏,它是關於下面的代碼:MySQL的 - 用更新和select語句

$res = mysql_query("SELECT * FROM users WHERE group='".$group."'"); 
if (mysql_num_rows($res)==1) { 

$row = mysql_fetch_assoc($res); 
$uid = $row['uid']; 

$user_update = mysql_query("UPDATE fe_users SET group = 5 WHERE group='".$group."'");   

return 'ok'; 

} else { 

return 'not ok'; 

} 

我檢查,如果存在與group = $group用戶。如果是,則組更新爲5,然後返回字符串「ok」,如果沒有group=$group的用戶存在,就可以看到字符串「不好」被返回。

這應該很容易,但現在的問題是,如果有一個用戶group=$group,更新是正確完成的,但不返回「OK」,PHP返回「不好」,就好像更改從上面執行的選擇中更新被追溯地考慮在內。我不明白這一點。任何幫助將非常感激。

Thanx提前, 傑登

+0

什麼是上下文?這是函數的代碼嗎?這是ajax響應的代碼嗎? – alesdario 2012-03-07 19:21:04

+0

這是一個函數,沒有ajax,我建立了一個沒有參數的場景,但仍然是一樣的。如果我從if部分刪除更新查詢,那麼if部分中的所有其他代碼都會正確執行,但如果未刪除update-query,那麼它是執行的if部分中的唯一內容,除了查詢else-part被執行。 – jayden 2012-03-08 19:23:36

+0

這很奇怪,因爲更新查詢在if語句中,而不在else語句中。你能一步步調試你的代碼嗎?如果沒有,請嘗試在update-statement之後放置'die('here')'並查看函數是否停止執行。 – alesdario 2012-03-08 20:11:18

回答

0

我覺得「羣」是你作爲一個字段名稱,更改或使用像

$res = mysql_query("SELECT * FROM users WHERE `group`='".$group."'"); 

$user_update = mysql_query("UPDATE fe_users SET `group` = 5 WHERE `group`='".$group."'"); 

,你可以使用數保留關鍵字($水庫)== 1而不是mysql_num_rows($ res)== 1如果是問題。

參考:Mysql Reserved keywords

0

我不知道這有什麼好處,而是嘗試在你的SELECT和UPDATE使用這種樣式的命令:WHERE組=「$組」,不使用字符串連接。除此之外,我似乎無法明白你爲什麼得到更新,而不是被返回「好」。

0

您正在檢查是否mysql_num_rows($res)==1,因此如果該組中只有一個用戶,則會返回ok。如果有兩個或更多用戶,則將返回not ok。可能不是你想要的,對吧?我想你應該檢查是否mysql_num_rows($res)>=1

0

你可能會考慮修改您的支架的位置,並改變你的NUM_ROWS檢查,像這樣:

$res = mysqli_query("SELECT uid FROM users WHERE `group` ='".$group."'"); 
if (mysqli_num_rows($res)>0) {//there was a result 
    while($row = mysqli_fetch_assoc($res)){ 
     // grab the user id from the row 
     $uid = $row['uid']; 
     // and update their record 
     $user_update = mysqli_query("UPDATE fe_users SET `group` = 5 WHERE `group`='".$group."'");   
     if(mysqli_num_rows($user_update)==1){ 
      return 'ok, updated user'; 
     } else { 
     // database error 
      return 'not ok, unable to update user record'; 
     } 
    }//end while row 
}else{ 
    return 'No results were found for this group.'; 
} 

通過選擇你想要的列,則減少查詢的開銷。通過將初始結果與0而不是1進行比較,您允許包含許多成員的組。通過將更新函數封裝在while循環中,您可以遍歷所有返回的結果,併爲每個結果更新記錄。通過移動返回'ok'/'not ok'的測試來檢查更新操作是否成功,您可以隔離數據庫錯誤。最後的else語句告訴你是否沒有執行更新操作,因爲沒有該組的成員。

順便說一句,對於將來兼容的代碼,我推薦使用mysqli,因爲「mysql_query」系列PHP函數已正式被棄用。快速啓動見http://www.php.net/manual/en/mysqli.query.php,這在很大程度上是一回事。