PHP - IF语句错误,仍然运行

时间:2013-11-25 12:13:17

标签: php mysql pdo

我一直坐在这个问题的最后一个小时。我有两个if语句(出于测试目的,它们都是IF语句,而不是IF和ELSE IF语句。代码运行错误的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 == 1234567891234567891234567 1234567891234567891234567 == 1234567891234567891234568

显然,第二个文本不应该存在,因为声明不正确。

4 个答案:

答案 0 :(得分:7)

在制作条件分叉时不要假设任何东西,在变量上使用var_dump()来暂时查看它们 - 这样你最好决定如何检查你期望的确切类型和值。

然后如上所述,更喜欢使用===

进行检查

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

PHP Truth Table固定一段时间会有所帮助。

答案 1 :(得分:7)

在测试相等性时,

==会忽略类型。在这种情况下,它将假设两个字符串都是数字并转换它们。这意味着这将转变为:

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

===将确保两个参数都是相同类型,并且不会尝试强制制作

'1234567891234567891234567' === '1234567891234567891234568';

给出预期的结果。

PHP平等有时是古怪的。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

我已经修改了你的代码一点点检查

   <?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;
      }
   }
  }
 ?>