user1902584
user1902584

Reputation:

Two While Loops, Second Returns Empty Array?

I'm experimenting with MySQLi and using the following code to check differences for how I should approach my array formatting/usage for fetch_array(MYSQLI_ASSOC);

here is my code:

include "Database.php"; 

$ArrayQuery = $mysqli->query("SELECT * FROM accountinformation");


while ($ArrayResults = $ArrayQuery->fetch_array(MYSQLI_ASSOC))
{
    echo count($ArrayResults);
    echo "<br>";
}
echo "<br><br><bR><br>";
    $Empty = array();
while ($ArrayResult = $ArrayQuery->fetch_array(MYSQLI_ASSOC))
{
    foreach ($ArrayResult AS $ArrayRes)
    {
        $Empty[] = $ArrayRes;
    }
}

print_r($Empty);

The problem is, that i'm using the same Variable for my while loop, the first one returns 3 then 3 Which is expected.

But the problem is, with my second query; it returns a blank array

array( ) when print_r();

and when I do:

while ($ArrayResult = $ArrayQuery->fetch_array(MYSQLI_ASSOC))
{
    print_r($ArrayResult);
}

For my Second while loop, it returns nothing for output.

I have checked my variables $ArrayResults and $ArrayResult are not duplicates, they are in fact unique.

Why is my second while loop returning nothing when my first one is working?

Update

When I produce a second query into the mixture with a different starting variable:

$ArrayQuer = $mysqli->query("SELECT * FROM accountinformation");

and modify my second while loop:

while ($ArrayResult = $ArrayQuer->fetch_array(MYSQLI_ASSOC))
{
    print_r($ArrayResult);
}

I get the expected output? So is it a case of MySQLi not allowing the same parameters to be used twice throughout the script?

Upvotes: 0

Views: 787

Answers (1)

Daryl Gill
Daryl Gill

Reputation: 5524

mysqli_data_seek

Adjusts the result pointer to an arbitrary row in the result

while ($ArrayResults = $ArrayQuery->fetch_array(MYSQLI_ASSOC))
    {
        echo count($ArrayResults);
        echo "<br>";
    }
    echo "<br><br><bR><br>";
    mysqli_data_seek($ArrayQuery,0); // Addition Made Here
        $Empty = array();
    while ($ArrayResult = $ArrayQuery->fetch_array(MYSQLI_ASSOC))
    {
        foreach ($ArrayResult AS $ArrayRes)
        {
            $Empty[] = $ArrayRes;
        }
    }
    print_r($Empty);

To re-use an already fetched array; you should use mysqli_data_seek(); (Notice I have added it above your `$Empty Variable) This should be the problem.

See the manual here:

http://us.php.net/manual/en/mysqli-result.data-seek.php

Think of this scenario; Why would you re-buy something you already own?

Fits perfectly in your case

Upvotes: 0

Related Questions