2012-03-07 8 views
0

との奇妙なことは、私が変なのmysql-事はここで起こって持って、それは次のコードについてです:group = $groupを持つユーザーが存在する場合、私は、チェックしていますの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'; 

} 

。そうであれば、グループは5に更新され、文字列 "ok"が返されます。group=$groupのユーザーが存在しない場合、文字列 "not ok"が返されます。

group=$groupのユーザがいる場合、アップデートは正しく行われますが、 "ok"を返す代わりに、phpは "not ok"を返すようになりました。上記の実行された選択に対して、遡及的に更新から考慮されている。私はこれを理解していない。どんな助けでも本当に感謝しています。私は、これはどんなメリットがあるかどうかわからないのですが、あなたのSELECTとUPDATEでこのスタイルを使用してみてください事前に

ありがとう、 ジェイデン

+0

コンテキストとは何ですか?これは関数のコードですか?これはAjaxレスポンスのコードですか? – alesdario

+0

これは関数であり、ajaxはありません。パラメータを持たないシナリオを作成しましたが、それと同じことです。 if-partからupdate-queryを削除すると、if-part内の他のコードはすべて正しく実行されますが、update-queryが削除されないとif-part内で唯一実行され、クエリのほかに、else部分が実行されます。 – jayden

+0

update-queryがif文であり、else文ではないので、非常に奇妙です。コードをステップバイステップでデバッグできますか?そうでない場合は、update-statementの後に 'die( 'here')'を入れて、関数が実行を停止するかどうか調べてください。 – alesdario

答えて

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の代わりに== 1が問題の場合。

参考:Mysql Reserved keywords

0

コマンド:文字列を使用しない群=「$グループが」、加入WHERE。それ以外の理由で私はなぜあなたがアップデートを取得していて、 "ok"が返されていないのか分からないようです。

0

mysql_num_rows($res)==1かどうかを確認しているので、そのグループにユーザーが1人しかいない場合は、okが返されます。 2人以上のユーザーがいる場合は、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.'; 
} 

をしたいだけの列を選択することで、クエリのオーバーヘッドを減らします。最初の結果を1ではなく0に比較することにより、メンバーが多いグループを許可します。更新関数をwhileループでラップすることによって、返されたすべての結果をループし、それぞれのレコードを更新することができます。更新操作の成功を確認するために 'ok'/'not ok'を返すテストを移動することにより、データベースエラーを分離することができます。最後のelseステートメントは、グループのメンバーがないために更新操作が実行されなかったかどうかを示します。

今後の互換性のあるコードでは、「mysql_query」ファミリのPHP関数が正式に廃止されたため、mysqliを使用することをお勧めします。クイックスタートについては、http://www.php.net/manual/en/mysqli.query.phpを参照してください。これはほぼ同じことです。