PHP-IF语句为false,仍在运行


PHP - IF-statement false, still runs

最近一个小时我一直在处理这个问题。我有两个if语句(出于测试目的,它们都是if语句,而不是if-和ELSE if语句。代码:

<?php
$sth = $pdo->query("SELECT * FROM myDBTable WHERE alien1='$idkod' OR alien2='$idkod'");
$result = $sth->fetchAll();
if(!$result)
{
    echo "No data";
}
else
{
    foreach($result as $row)
    {
        $alien1 = $row['alien1'];
        $alien2 = $row['alien2'];
        if($idkod == $alien1)
        {
            echo $idkod . "==" . $alien1;
        }
        if($idkod == $alien2)
        {
            echo $idkod . "==" . $alien2;
        }
    }
}
?>

这将在屏幕上显示以下文本:1234567891234567891234567==123456789123451234567891234567891234567==12345678912345 67891234568

显然,第二个文本不应该出现在那里,因为这个说法是不正确的。

在生成条件分叉时不要假设任何东西,对变量使用var_dump()来临时查看它们内部,这样可以最好地决定如何检查所需的确切类型和值。

然后如前所述,更喜欢使用===进行检查

如果你采用这种行为,你将节省无数的时间,并避免代码中出现一些非常微妙的错误。

将PHP真值表固定一段时间会有所帮助。

==在测试相等性时忽略类型。在这种情况下,它将假定两个字符串都是数字,并对它们进行转换。这意味着这将变成:

9223372036854775807 == 9223372036854775807 //Max int val. Will be different on different systems.

===将确保两个参数的类型相同,并且不会试图强制生成

'1234567891234567891234567' === '1234567891234567891234568';

给出预期结果。

PHP平等有时很古怪。

使用==是错误的,需要使用===第二个是值比较,第一个是对象比较(取决于上下文)

我修改了你的代码一点,检查一下

   <?php
$sth = $pdo->query("SELECT * FROM myDBTable WHERE alien1='$idkod' OR alien2='$idkod'");
 $result = $sth->fetchAll();
if(!$result)
{
echo "No data";
}
  else
    {
   foreach($result as $row)
    {
      $alien1 = $row['alien1'];
      $alien2 = $row['alien2'];
     if($idkod == $alien1 && $idkod != $alien2)
     {
         echo $idkod . "==" . $alien1;
     }
      if($idkod == $alien2 && $idkod != $alien1)
      {
        echo $idkod . "==" . $alien2;
      }
   }
  }
 ?>