user2679359
user2679359

Reputation: 11

PHP query inside while loop fails

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

Changed my code to this, and still i got the same problem, the if clause if met, but it echoes from my else instead

Upvotes: 0

Views: 352

Answers (2)

Jim D
Jim D

Reputation: 978

Although I think there are other ways this code could be cleaned up, it seems to me that you're attempting to compare a DateTime object to a date string, which is going to yield unpredictable results. Try changing your while part to:

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

I'm not sure this will fully solve your issues, but it should get you closer.

Upvotes: 0

GGio
GGio

Reputation: 7653

Reason is that you are using same variable names that overwrite each other. $objResult rename this to something like $objResult2 for the inner query.

One thing to keep in mind is that your inner query inside a loop is really unnecessary unless you did not provide some piece of code. You can just put that query outside of while loop. Will save you time & memory.

Upvotes: 2

Related Questions