Problem with mysqli fetch

2019-08-08 05:50发布

问题:

I'm having a mysqli data fetching problem. I will try to explain my problem by example:

I want to fetch entries (by different persons), from a table. Now I want to look for each of the fetched person's name in another table and see if he has any photo. My code is given below, however its not working, I'm getting following errors:

mysqli::prepare() [mysqli.prepare]: All data must be fetched before a new statement prepare takes place
    Call to a member function fetch() on a non-object in ...

My Code:

if ($stmt = $this->mysqli->prepare("SELECT entry, author, time FROM messages WHERE user = ?")) {
            $stmt->bind_param("s", $user_name);
            $stmt->execute();
            $stmt->bind_result($entry, $author, $time);

        while ($stmt->fetch()) {             
                 if ($stmt = $this->mysqli->prepare("SELECT photo_id FROM photos WHERE user = ?")) {
                     $stmt->bind_param("s", $author);
                     $stmt->execute();   
                     $stmt->bind_result($photo_id); 
                }
           //echo $photo_id; 
        }    
    $stmt->close();
    }

I'll be very thankful for any help.

回答1:

Assign the second statement to new variable so it wouldn't override the first variable and cause the "all data must be fetched.." error.

if ($stmt = $this->mysqli->prepare("SELECT entry, author, time FROM messages WHERE user = ?")) {
        $stmt->bind_param("s", $user_name);
        $stmt->execute();
        $stmt->bind_result($entry, $author, $time);

        while ($stmt->fetch()) {             
            if ($st = $this->mysqli->prepare("SELECT photo_id FROM photos WHERE user = ?")) {
                $st->bind_param("s", $author);
                $st->execute();   
                $st->bind_result($photo_id); 
            }
            //echo $photo_id;
            $st->close();
        }    
    $stmt->close();
}


标签: mysqli