【问题标题】:PHP if statement "broken" when checking on row检查行时PHP if语句“损坏”
【发布时间】:2018-01-05 17:01:12
【问题描述】:

我无法使用 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 命令的输出似乎是正确的,我们应该得到一个 0 的 id 条目...

在写这个问题时,我想过放弃这个问题并将 $row 与 NULL 进行比较。但这无济于事。它仍然会返回 false...

【问题讨论】:

  • $row 的确切值是多少?似乎这可能是一个“真实”的值,这让我认为你的 if 需要一个不同的条件,这听起来也像你在想的那样。
  • alert 函数是什么?
  • @aynber alert 只是将 var_dump 包裹在 <div class="alert"> 中。使其更易于阅读。 true 标志用于切换“var_dump”或“打印”:P
  • 等等,你怎么知道它正在运行 if 语句?它将返回 false,或者将返回 0 的 id。如果在函数之外仅使用两个等号,则两者都评估为 false。通过在 if 语句中添加另一个警报并在其后添加一个警报来验证它击中的是哪个,例如 alert('inside the if');alert('did not hit if');
  • 谢谢大家,这与此方法无关。这是因为“0”被视为假...

标签: php mysql pointers if-statement types


【解决方案1】:

if显然没有坏掉,这个方法也没有什么问题。正如@aynber 所指出的,当使用== 比较事物时,PHP 将"0" 视为false。在这个方法之外,我进行了一个测试,检查它是否返回 false,如果不是,我很高兴并认为“它从数据库中返回了 ID。

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

【讨论】:

    猜你喜欢
    • 2020-02-14
    • 2016-12-14
    • 2012-09-17
    • 2013-04-09
    • 1970-01-01
    • 2017-12-30
    • 2022-09-23
    • 2012-05-31
    • 2012-05-12
    相关资源
    最近更新 更多