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

Car*_*son 3 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;
        }
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

这将在屏幕上显示以下文本:1234567891234567891234567 == 1234567891234567891234567 1234567891234567891234567 == 1234567891234567891234568

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

Cup*_*ups 7

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

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

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

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


Jim*_*Jim 7

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

9223372036854775807 == 9223372036854775807 //Max int val. Will be different on different systems.
Run Code Online (Sandbox Code Playgroud)

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

'1234567891234567891234567' === '1234567891234567891234568';
Run Code Online (Sandbox Code Playgroud)

给出预期的结果.

PHP平等有时是古怪的.