PHP if语句"破坏"检查行时

时间:2018-01-05 17:01:12

标签: php mysql pointers if-statement types

我无法获得IF语句来执行"对"事情,代码;

public function getUID($email)
{
    $query = $this->dbh->prepare("SELECT id FROM users WHERE email = ?");
    $query->execute(array($email));

    $row = $query->fetch(\PDO::FETCH_ASSOC);

    alert($row, true);           // array(1) { ["id"]=> string(1) "0" }
    alert(is_array($row), true); // bool(true)
    alert($row == false, true);  // bool(false)
    if( $row == false ) {
        // Here we are!
        return false;
    }

    return $row['id'];
}

由于某种原因,if语句认为结果是真的,我不明白为什么:[] sql-command的输出似乎是正确的,我们应该得到一个0的id-entry。

在写这个问题时,我考虑放弃这个问题并将$ row与NULL进行比较。但这并没有帮助。它仍然会返回虚假......

1 个答案:

答案 0 :(得分:0)

if显然没有被破坏,这种方法没有任何问题。正如@aynber指出的那样,当使用"0"来比较事物时,PHP会将false视为==。在这个方法之外,我有一个测试,检查它返回false,如果不是我很高兴,并认为“它从数据库返回ID。

因此,简单的解决方案是使用===进行此检查。比较类型和价值。