2010-07-21 5 views
1

내가 텍스트 파일을 읽고 몇 가지 기록을 처리하고, 텍스트 파일의 관련 샘플은 APPLICATION_ID 이미 내 데이터베이스에 저장 및 is_primary = 1If 문을 사용하여 변수가 변경되는 이유는 무엇입니까?

때 나는 특정 작업을 수행 할

#export_dategenre_idapplication_idis_primary 
#primaryKey:genre_idapplication_id 
#dbTypes:BIGINTINTEGERINTEGERBOOLEAN 
#exportMode:FULL 
127667880285760063715151750 
12766788028576

입니다

내 코드를 테스트하려면이 PHP를 썼다 : 화면이 출력 결과와 내가 예상 한대로 정확하게

$fp1 = fopen('genre_application','r'); 
if (!$fp) {echo 'ERROR: Unable to open file.'; exit;} 


while (!feof($fp1)) { 
    $line = stream_get_line($fp1,128,$eoldelimiter); //use 2048 if very long lines 
if ($line[0] === '#') continue; //Skip lines that start with # 
    $field = explode ($delimiter, $line); 
list($export_date, $genre_id, $application_id, $is_primary) = explode($delimiter, $line); 

// does application_id exist? 
$application_id = mysql_real_escape_string($application_id); 
$query = "SELECT * FROM jos_mt_links WHERE link_id='$application_id';"; 
$res = mysql_query($query); 
if (mysql_num_rows($res) > 0) { 
echo $application_id . "application id has genre_id" . $genre_id . "with primary of " . $is_primary. "\n"; 
} else 
{ 
// no, application_id doesn't exist 
} 

} //close reading of genre_application file 
fclose($fp1); 

합니다. 그때 아래 코드 등의 IF 문을 추가하면 화면 표시의 다음 화면 표시 결과 상기

$fp1 = fopen('genre_application','r'); 
if (!$fp) {echo 'ERROR: Unable to open file.'; exit;} 


while (!feof($fp1)) { 
    $line = stream_get_line($fp1,128,$eoldelimiter); //use 2048 if very long lines 
if ($line[0] === '#') continue; //Skip lines that start with # 
    $field = explode ($delimiter, $line); 
list($export_date, $genre_id, $application_id, $is_primary) = explode($delimiter, $line); 

// does application_id exist? 
$application_id = mysql_real_escape_string($application_id); 
$query = "SELECT * FROM jos_mt_links WHERE link_id='$application_id';"; 
$res = mysql_query($query); 
if (mysql_num_rows($res) > 0) { 
if ($is_primary = '1') echo $application_id . "application id has genre_id" . $genre_id . "with primary of " . $is_primary. "\n"; 
} else 
{ 
// no, application_id doesn't exist 
} 

} //close reading of genre_application file 
fclose($fp1); 
?> 

코드로 나타낸 바와 같이

371515175application id has genre_id6006with primary of 0 

371515175application id has genre_id6012with primary of 1 

, 그것 든 is_primary의 값을 변경 이전 화면 디스플레이 볼 및 샘플 텍스트 파일을 할 수있는 경우에 어떤 잘못 1 차와 첫 번째 필드를 가지고, 그것은 0

371515175application id has genre_id6006with primary of 1 

371515175application id has genre_id6012with primary of 1 

사람이 설명 할 수 있어야한다 변수를 변경하기 위해 내가하고있는 일과 올바르게 사용하는 경우 어떻게 사용해야합니까? "=" "=="실제로 비교하고 아무것도 변경되지 않습니다 변수 정의하고 true를 반환하지만

if ($is_primary == '1') 

하지

if ($is_primary = '1') 

때문에 :

답변

7

당신은 는 비교 대신 값을 할당됩니다

($is_primary = '1')

당신이 필요 ($is_primary == '1')

또는 형태 보증 비교 ===

.

('1' == $is_primary)

실수가 "1"아무것도 할당 할 수 없기 때문에 여기 만드는 것은 불가능하다 : 어떤 사람들과 같이 자신의 비교를 쓰기 좋아하는 이유

이입니다.

개인적으로, 나는 시간이 지남에 따라 성장하는 실습을 통해 실수를 발견하는 법을 배우게 될 것이라고 생각합니다.

2

당신은 사용해야합니다.

0

if ($ is_primary == '1') ....

하지

=하지만

==

또한 같은 예를 들어 뭔가를해야만에 대한 질문의 독서 버그 모든 물건을 제거하는 것도 고려 :

// does application_id exist? 
$res = mysql_query($query); 
if (mysql_num_rows($res) > 0) { 
    echo $is_primary. "\n"; 
} 

이 더 읽을을 당신에게 목적에 맞게. 자신도 버그를 발견 할 수 있습니다.

1

if-line에는 (값 비교) 대신 = (값 지정)이 하나만 있습니다.

대신을 시도해보십시오

if ($is_primary == '1') 
1

경우 ($ is_primary = '1') 당신은 == 비교 연산자를 사용할 필요가 아닌 할당 연산자 =

0

당신이 경우 를 입력하면 ($ x = 10) ...

그런 다음 성공을 리턴 할 true를 리턴하는 $ x = 10 의 조작을 시도한다고 알려줍니다. 이것은 항상 루프를 실행하고 x의 값을 변경합니다. ($의 X의 == 10) ...

는 그러나주의 경우

$의 X 테스트 에, 10의 경우 ($의 X 하지 같 $ X 를 테스트하는 를 사용! = 10) ...

즉, 하나는 동등하고 하나는 뱅입니다.

관련 문제