2011-07-06 6 views
1

以下のコードは、名前がすでにデータベースに存在するかどうかをチェックし、既に存在する場合はブール値を設定します。しかし、名前が存在しない場合でもブール値を設定します。私はこれを何度も確認しました。だから私のコードは間違っているはずだと思います。私は、この行がすべてで見つかった結果があったかどうかをチェックしていると思いますPHPのifステートメント内のvarに代入する

if ($row = mysql_fetch_assoc($result)) 

を参照するには、チェックとして以下の行を理解しています。結果が見つかった場合、条件式はTRUEと評価されるため、$rowが割り当てられます。あれは正しいですか?

コードやその他の問題が発生していますか?私はmysql_queryが含まれている行が疑わしいです。データベースのテーブルにない名前を検索すると、それはまだifブロックに入ります。

$udid_mismatch = false; 
$name_found = false; 
$result = mysql_query("SELECT udid 
         FROM $table 
         WHERE name='$name'"); 

if($row = mysql_fetch_assoc($result)) { 
    $name_found = true; 

    if($row['udid'] != $udid) { 
    $udid_mismatch = true; 
    } 
} 
+1

正常に動作するはずです。 mysql_num_rowsを確認してみてください。 –

答えて

0
$udid_mismatch = $name_found = false; 

$result = mysql_query("SELECT `udid ` 
         FROM `$table ` 
         WHERE `name` = '$name'"); 

if (mysql_num_rows($result) > 0) { 
    $name_found = true; 
    while ($row = mysql_fetch_assoc($result)) { 
     if ($row['udid'] != $udid) { 
      $udid_mismatch = true; 
      break; 
     } 
    } 
} 
0

私はその後、私は結論にジャンプして実現し、あなたが平等の代わりに等しいを使用する必要があることを書き始めました。

mysql_fetch_assocは、データが存在する場合は配列を返し、残っていない場合はFALSEを返します。私の勘違いは$行が決して偽に設定されることはありません。 $ rowをデバッグし、名前が見つからないときに返される値を確認します。空の配列を代入する場合、それはまだ真と評価されます。

あなたのロジックは、if文の中で平等を使用することに威力を発揮します。 FALSEと等しい場合、ifステートメントは実行されません。割り当てがtrueに評価された場合

http://php.net/manual/en/function.mysql-fetch-assoc.php

0
if($row = mysql_fetch_assoc($result)) { 

は、if文を入力します(つまり、同じ偽/ 0/nullではない)

あなたは、スタートの行上の変化をループされていませんIF WHILE

if($row = mysql_fetch_assoc($result)) { 

while($row = mysql_fetch_assoc($result)) { 
01に
+0

また、スニペットに$ udidを指定していない – gingerCodeNinja

関連する問題