PHP - IF语句条件为false时,仍然会执行。

3

过去一个小时我一直在处理这个问题。我有两个if语句(为了测试目的,它们都是if语句,而不是if和else if语句)。代码运行false if语句,就好像它是true一样。

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

很明显,第二个文本不应该出现,因为该语句不正确。


作为第一步,我建议尝试使用 ===。 - SBI
1
$idkod是什么类型的?它闻起来像是一些类型转换的魔法。你试过用小得多的数字或字符串值吗? - l-x
4个回答

7

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

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

=== 会确保两个参数是相同的类型,并且不会尝试进行强制转换。

'1234567891234567891234567' === '1234567891234567891234568';

给出预期结果。

PHP的相等比较有时候很奇怪。


没问题,很高兴能帮忙。 - Jim

7
不要在创建条件分支时做任何假设,使用 var_dump() 查看变量内部的临时信息 - 这样您可以更好地决定如何检查您所期望的确切类型和值。接下来,如先前所述,请优先使用 === 进行检查。
如果您采用这种行为,您将节省无数小时并避免在代码中出现一些相当微妙的错误。
PHP 真值表贴在那里一段时间会有所帮助。

我刚刚使用了var_dump对每个变量进行了转储,它们全部都是string(25)类型。谢谢您的回答,从这里开始我会使用全等运算符(===)。 - Carl Bear Stefansson
事实上,在给定的链接(PHP真值表)中,有一个由“php at richardneill dot org”发表的评论,解释了这个确切的问题!+1 - Tomás

2

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


1
但是这些值已经不同了:1234567891234567891234567 != 1234567891234567891234568 - matewka
哈?我刚才说了,你忽略了 == 不等于 === 它在 PHP 内部有不同的含义和处理方式。请使用 **===**。 - Noam Rathaus

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接