Fatal error: Call to a member function fetch() on a non-object in
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 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)
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
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;
}
?>
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.
Dan is $albums_query FALSE oftewel je query mislukt.
Ik heb nu bijvoorbeeld;
Code (php)
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
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;
}
?>
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;
}
?>
De volgorde is:
Query uitvoeren
Controleren of er wat fout ging
Data verwerken
Die if moet dus voor de while en niet er in.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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();
}
?>
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...
Maar je fetch moet in de else staan (dus als je query niet mislukt is)
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...
Als je verbinding maakt met je database is is dat in alle bestanden beschikbaar.