2011-07-06 4 views
1

아래의 코드는 이름이 이미 데이터베이스에 존재하는지 여부를 확인하고, 이미 있으면 부울을 설정합니다. 그러나 이름이 존재하지 않는 경우에도 부울을 설정합니다. 나는 이것을 여러 번 확인했다. 내 코드가 잘못되었다고 생각합니다. 나는PHP의 if 문 안에있는 var에 할당하기

if ($row = mysql_fetch_assoc($result)) 

내가이 줄을 전혀 발견 결과가 있었다 여부를 확인 생각 볼 수있는 검사로 아래 라인을 이해합니다. 결과가 발견되면 조건문은 TRUE로 평가되므로 $row이 할당됩니다. 그 맞습니까?

코드 나 다른 문제가 발생 했습니까? 때로는 데이터베이스 테이블에없는 이름을 검색 할 때 가끔 블록을 입력하기 때문에 mysql_query이 포함 된 행은 의심 스럽습니다.

$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은 데이터가 존재하면 배열을 반환하고, 남아있는 행이 없다면 거짓을 반환합니다. 내 직감은 $ 행이 결코 거짓으로 설정되지 않는다는 것입니다. $ 행을 디버깅하고 이름이없는 경우 반환되는 값을 확인하려고합니다. 빈 배열을 할당하는 경우 여전히 true로 평가됩니다.

로직은 if 문 내부에서 평등을 사용하는 것이 좋습니다. FALSE와 같으면 if 문이 실행되지 않습니다. 할당이 true로 평가되면

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

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

당신은 시작에 대한 행에 걸쳐 반복되지 않습니다

변경 (예 : 동일하지 않은 허위/0/NULL 인)를 if 문을 입력 할 것 잠시

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

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

또한 스 니펫에 $ udid를 지정하지 않았습니다. – gingerCodeNinja