Fatal error: Call to a member function fetch() on a non-object in

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rob Cnossen

Rob Cnossen

10/06/2013 10:18:21
Quote Anchor link
Hallo,
Ik ben bezig om mijn mysql database om te zetten naar pdo database. Ik stuit daarbij op voor mij nieuwe foutmeldingen zoals Fatal error: Call to a member function fetch() on a non-object in...
Wanneer ik de function fetch weghaal om te kijken wat er dan gebeurt komt er een volgende Fatal error on a non-object. Ik doe dus iets structureels verkeerd maar ik weet niet wat.

Ik dacht eerst dat het een global probleem was en heb dus overal
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php global $database; ?>
geplaatst(zou dan later kijken of het mooier kon) maar de foutmeldingen blijven hetzelfde. Via google is er genoeg over te vinden maar een antwoord op mijn probleem heb ik niet gevonden.

De functie waar de foutmelding in zit is deze;
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
function get_albums() {
    global $database;
    $albums = array();
    
    $albums_query = $database->query("SELECT `albums`. `album_id`, `albums`.`timestamp`, `albums`.`name`, LEFT(`albums`.`description`, 50) as `description`, COUNT(`images`. `image_id`) as `image_count`
    FROM `albums`
    LEFT JOIN `images`
    ON `albums`.`album_id` = `images`.`album_id`
    WHERE `albums`.`user_id` = "
.$_SESSION['user_id']."
    GROUP BY `albums`.`album_id`
    "
);
    
    //while ($albums_row = mysql_fetch_assoc($albums_query))
    while ($albums_row = $albums_query->fetch(PDO::FETCH_ASSOC)) {
        $albums[] = array(
            'id' => $albums_row['album_id'],
            'timestamp' => $albums_row['timestamp'],
            'name' => $albums_row['name'],
            'description' => $albums_row['description'],
            'count' => $albums_row['image_count']
            );
}
    }


return $albums;
}

?>

Ligt het bijvoorbeeld aan hoe ik fetch heb geïmplementeerd of wat zou het kunnen zijn?
De database connectie is goed.
 
PHP hulp

PHP hulp

20/04/2024 04:59:58
 
TJVB tvb

TJVB tvb

10/06/2013 11:27:47
Quote Anchor link
Dan is $albums_query FALSE oftewel je query mislukt.
 
Rob Cnossen

Rob Cnossen

10/06/2013 13:42:34
Quote Anchor link
Oke, de $albums_query is FALSE, dus er kan iets niet kloppen in mijn database of query, naam verkeerd gespeld of zoiets. Ik probeer met errorinfo() erachter te komen wat er dan fout is maar tot nu toe krijg ik geen informatie hierover terug. Hoe kan ik dit het beste doen?
Ik heb nu bijvoorbeeld;
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
function get_albums() {
    global $database;
    $albums = array();
    
    $albums_query = $database->query("SELECT `albums`. `album_id`, `albums`.`timestamp`, `albums`.`name`, LEFT(`albums`.`description`, 50) as `description`, COUNT(`images`. `image_id`) as `image_count`
    FROM `albums`
    LEFT JOIN `images`
    ON `albums`.`album_id` = `images`.`album_id`
    WHERE `albums`.`user_id` = "
.$_SESSION['user_id']."
    GROUP BY `albums`.`album_id`
    "
);
    
    //while ($albums_row = mysql_fetch_assoc($albums_query))
    while ($albums_row = $albums_query->fetch(PDO::FETCH_ASSOC)) {
        $albums[] = array(
            'id' => $albums_row['album_id'],
            'timestamp' => $albums_row['timestamp'],
            'name' => $albums_row['name'],
            'description' => $albums_row['description'],
            'count' => $albums_row['image_count']
            );

            if ($albums_query === false){
    $errorInfo = $albums_query->errorInfo();
}
    }


return $albums;
}

?>
 
TJVB tvb

TJVB tvb

10/06/2013 13:50:45
Quote Anchor link
Je controleert dat pas in je while, daar kom je nooit als het fout gaat.
De volgorde is:
Query uitvoeren
Controleren of er wat fout ging
Data verwerken
Die if moet dus voor de while en niet er in.
 
Rob Cnossen

Rob Cnossen

10/06/2013 19:19:52
Quote Anchor link
Dat zou dan zo moeten zijn?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
function get_albums() {
    //$database = new database;
    global $database;
    $albums = array();
    
    $albums_query = $database->query("SELECT `albums`. `album_id`, `albums`.`timestamp`, `albums`.`name`, LEFT(`albums`.`description`, 50) as `description`, COUNT(`images`. `image_id`) as `image_count`
    FROM `albums`
    LEFT JOIN `images`
    ON `albums`.`album_id` = `images`.`album_id`
    WHERE `albums`.`id` = "
.$_SESSION['id']."
    GROUP BY `albums`.`album_id`
    "
);
    if ($albums_query === false){
    $errorInfo = $albums_query->errorInfo();
}

?>

Ik zie helaas geen andere foutmelding dan Fatal error: Call to a member function fetch() on a non-object in...
 
TJVB tvb

TJVB tvb

11/06/2013 09:20:41
Quote Anchor link
Ik zie hier zelfs je fetch niet staan.

Maar je fetch moet in de else staan (dus als je query niet mislukt is)
 
Rob Cnossen

Rob Cnossen

11/06/2013 11:03:52
Quote Anchor link
De fetch staat er inderdaad onder.
Ik heb er ondertussen zo'n zooitje van gemaakt met het zoeken naar een oplossing dat ik maar heb besloten om helemaal opnieuw te beginnen en dan stap voor stap kijken waar het goed gaat en waar het niet goed gaat.

Een vraag nog, als ik een pagina, bijvoorbeeld albums.php verbind met de database dan is toch alles wat ik include/require, zoals de functies.php, in die pagina toch automatisch ook verbonden met de database?

Bedankt...
 
TJVB tvb

TJVB tvb

11/06/2013 11:05:35
Quote Anchor link
Als je verbinding maakt met je database is is dat in alle bestanden beschikbaar.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.