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

kit*_*ski 1 php if-statement

我正在读取文本文件并处理一些记录,文本文件的相关示例是

#export_dategenre_idapplication_idis_primary
#primaryKey:genre_idapplication_id
#dbTypes:BIGINTINTEGERINTEGERBOOLEAN
#exportMode:FULL
127667880285760063715151750
127667880285760123715151751
Run Code Online (Sandbox Code Playgroud)

我想在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);
Run Code Online (Sandbox Code Playgroud)

这导致屏幕上的输出,正如我预期的那样.

371515175application id has genre_id6006with primary of 0

371515175application id has genre_id6012with primary of 1
Run Code Online (Sandbox Code Playgroud)

如果我然后在下面的代码中添加一个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);
?>
Run Code Online (Sandbox Code Playgroud)

上面的代码导致以下屏幕显示,它错误地具有主要为1的第一个字段,当前一个屏幕显示和示例文本文件可以看到它应该为0时

371515175application id has genre_id6006with primary of 1

371515175application id has genre_id6012with primary of 1
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释我正在做什么来改变变量以及我应该如何正确使用If?

Pek*_*ica 7

您正在分配值而不是比较:

($is_primary = '1')

你需要

($is_primary == '1')

或者===用于类型安全的比较.

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

('1' == $is_primary)

这里的错误是不可能的,因为"1"不能分配任何东西.

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