[PHP] Call to a member function query() on a non-object

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik krijg steeds de foutmelding "Fatal error: Call to a member function Fetch() on a non-object in /var/www/Data/test.php" bij mijn script. Ik wil een sqlite database uitlezen. De connection is er wel, want hij geeft aan Connected (en niet Connection failed).
Ik heb veel dingen geprobeerd, maar blijf deze foutmelding krijgen. Iemand een idee hoe die eruit te halen is?

Bedankt alvast!


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

$dsn = 'sqlite:trac.db';

try {
    $dbh = new PDO($dsn);
    echo "Connected";
}
catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

$results = $dbh->query("SELECT type, filename, size FROM attachment WHERE id = WikiStart");        
$nI = 0;

 while ($row = $results->Fetch(PDO::FETCH_ASSOC)) 
{            
    echo "Er is resultaat";
    $nI++;   
}

?>

Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 16:32
Hoe kom je aan het object $objDB?

Naar mijn weten definieer je die nergens.

Ook handig als je ff code tags om je code zet, dan is het allemaal wat leesbaarder :)

[ Voor 36% gewijzigd door Enfer op 04-09-2009 12:06 ]


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 17-09 16:59

Johnny

ondergewaardeerde internetguru

Je verbinding staat in de variable $dbh, je voert een query uit op $objDB, wat geen object is zoals in de foutmelding staat.

[ Voor 26% gewijzigd door Johnny op 04-09-2009 12:06 ]

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • masq
  • Registratie: September 2004
  • Laatst online: 18-04 00:18
Verwijderd schreef op vrijdag 04 september 2009 @ 12:03:
Ik heb veel dingen geprobeerd, maar blijf deze foutmelding krijgen. Iemand een idee hoe die eruit te halen is?
Door je code nog eens goed door te lezen.

Acties:
  • 0 Henk 'm!

  • trinite_t
  • Registratie: Maart 2003
  • Laatst online: 17-09 14:06
blabla

[ Voor 96% gewijzigd door trinite_t op 04-09-2009 12:59 ]

The easiest way to solve a problem is just to solve it.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Excuses, dit waren 2 scriptjes in elkaar gevoegd waarbij ik de variabelen nog niet had aangepast. Had dat eerder wel gewoon gedaan en getest, maar deed het ook niet.

Fatal error: Call to a member function Fetch() on a non-object..

Ik kan ook idd net als iedereen lezen dat er iets is dat geen object is, maar ik ben geen die-hard programmeur en zit sinds deze week op stage waarbij ik dat wel moet gaan doen en zodoende ben ik het aan het leren. Dit zijn scripts die al geschreven zijn maar niet goed, wat ik dus moet aanpassen.. vandaar. Sorry voor mijn 'onwetendheid'

Acties:
  • 0 Henk 'm!

  • Bee.nl
  • Registratie: November 2002
  • Niet online

Bee.nl

zoemt

De oplossing is vrij basic hoor. De foutmelding geeft zelf al aan welke functie niet uitgevoerd kan worden, in dit geval 'Fetch'. De functie 'Fetch' wordt losgelaten op variable '$results'. Als $dbh->query() mislukt dan is $results opeens geen object meer, maar simpelweg false. :)

Kijk ook eens naar de functie var_dump, dat scheelt je een hoop werk bij het debuggen van code.

[ Voor 22% gewijzigd door Bee.nl op 04-09-2009 12:36 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Geweldig.. de stomste fout ooit.. geen quotes om WikiStart. Dank!

Acties:
  • 0 Henk 'm!

  • Bee.nl
  • Registratie: November 2002
  • Niet online

Bee.nl

zoemt

Verwijderd schreef op vrijdag 04 september 2009 @ 12:41:
Geweldig.. de stomste fout ooit.. geen quotes om WikiStart. Dank!
Vergeet dan ook niet om het volgende stukje code erin te plaatsen:
PHP:
1
2
3
if ($results) {
   // code
}

Je wilt je gebruikers niet lastig vallen met allerlei foutmeldingen :X . Die moet je met voorbedachte rade opvangen en netjes verwerken.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Nog stommer: foutafhandeling bij system/db calls achterwege laten. Controleer altijd de return value, zodat je sneller merkt dat het fout gaat.

{signature}

Pagina: 1