为什么使用If语句更改变量?

时间:2010-07-21 08:08:47

标签: php if-statement

我正在阅读文本文件并处理一些记录,文本文件的相关样本是

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

我想在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 个答案:

答案 0 :(得分:7)

分配值而不是比较:

($is_primary = '1')

你需要

($is_primary == '1')

===进行类型安全比较。

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

('1' == $is_primary)

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

就个人而言,我认为随着时间的推移和不断增长的实践,人们将学会发现错误。

答案 1 :(得分:2)

您需要使用:

if ($is_primary == '1')

不是

if ($is_primary = '1')

因为“=”定义变量并返回true,但“==”实际上是比较并且不会改变任何内容。

答案 2 :(得分:1)

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

请改为尝试:

if ($is_primary == '1')

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

NOT = BUT ==

还要考虑删除所有错误阅读问题的内容,例如:

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

这更具可读性,符合您的目的。 你甚至可能会发现自己有一些错误。

答案 5 :(得分:0)

如果您输入 如果($ X = 10)...

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

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

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

即一个等于和一个爆炸。

答案 6 :(得分:0)