2010-07-21 45 views
1

我读一个文本文件,并处理一些记录,文本文件的相关样品为什么使用If语句更改变量?

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

我想执行特定操作时APPLICATION_ID已经与存储在我的数据库中is_primary = 1

我写这个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); 

导致该输出在屏幕上是完全一样的我的预期。

371515175application id has genre_id6006with primary of 0 

371515175application id has genre_id6012with primary of 1 

如果我然后添加的IF语句,如下代码,它以某种方式改变了is_primary值如图中的画面显示

$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); 
?> 

上述代码在下面的屏幕显示的结果,它错误地具有为1的初级的第一场中,当如可通过前一屏幕显示可以看出与示例文本文件应该是0

371515175application id has genre_id6006with primary of 1 

371515175application id has genre_id6012with primary of 1 

谁能解释我在做什么来改变变量以及我应该如何正确使用If?

回答

7

分配一个值,而不是比较:

($is_primary = '1')

你需要

($is_primary == '1')

===的类型安全的比较。

这就是为什么有些人喜欢写自己比较像这样:

('1' == $is_primary)

的错误是不可能在这里提出,因为“1”不能分配任何东西。

就个人而言,我认为随着时间的推移以及随着日益增长的实践,人们会学会发现错误。

2

您需要使用:

if ($is_primary == '1') 

if ($is_primary = '1') 

因为 “=” 定义变量并返回true,但 “==” 其实相比较,并不会改变任何东西。

0

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

不等于但==

也可以考虑删除所有的东西,错误的问题,例如财产以后像阅读:

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

这是更具可读性和适合你的目的。 你甚至可能发现自己确实有一些bug。

1

该if行只有一个=(赋值)而不是两个==(比较值)。

试试这个:

if ($is_primary == '1') 
1

如果($ is_primary = '1') 您需要使用比较操作符==,而不是赋值运算符=

0

如果键入 如果( $ x = 10)...

然后你告诉它尝试操作 $ x = 10 它将返回成功(返回true)。这将始终运行循环,并更改x的值。

测试 $ X,使用 如果($ X == 10)...

但是请注意,以测试$ X 等于10 如果($ X!= 10 )...

即一等于一等。