循环中的PHP查询失败

时间:2014-08-19 20:30:38

标签: php mysqli

    $id = 2;
    // query to fetch delayed
    $sql = "SELECT * FROM leads WHERE status = ('$id') LIMIT 1";
    $obResult = $objConnection->query($sql);
    // query to fetch if there is no delayed
    $q = "SELECT * FROM leads WHERE status = ('$id') AND later != '1' ORDER BY postnummer LIMIT 1";
    $oResult = $objConnection->query($q);
    // primary query to run, which makes use of the two above accordingly
    $query = "SELECT * FROM leads WHERE status = ('$id') LIMIT 1";
    $objResult = $objConnection->query($query);

    while ($row = $objResult->fetch_object()) {
        if (new DateTime() > $row->delay && $row->delay != '0000-00-00 00:00:00') {
            while ($row = $obResult->fetch_object()) {
                echo $row->firmanavn;
            }
        } else {
            while ($row = $oResult->fetch_object()) {
                echo $row->firmanavn;
            }
        }
    }

将我的代码更改为此,但仍然遇到了同样的问题,如果满足if子句,但它会从我的其他地方回复

2 个答案:

答案 0 :(得分:2)

原因是您使用的是相互覆盖的相同变量名称。对于内部查询,$objResult将此名称重命名为$objResult2

要记住的一件事是,除非你没有提供一些代码,否则你在循环中的内部查询实际上是不必要的。您可以将该查询放在while loop之外。会节省你的时间和时间存储器中。

答案 1 :(得分:0)

虽然我认为还有其他方法可以清除此代码,但在我看来,您正在尝试将DateTime对象与日期字符串进行比较,这会产生不可预测的结果。尝试将您的while部分更改为:

$current_date = new DateTime();

while ($row = $objResult->fetch_object()) {
    if (
        $current_date->format('Y-m-d H:i:s') > $row->delay &&
        $row->delay != '0000-00-00 00:00:00'
    ) {
        while ($row = $obResult->fetch_object()) {
            echo $row->firmanavn;
        }
    } else {
        while ($row = $oResult->fetch_object()) {
            echo $row->firmanavn;
        }
    }
}

我不确定这会完全解决你的问题,但它会让你更接近。