[PHP] PDO geeft geen resultaten terug

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Carharttguy
  • Registratie: Juli 2010
  • Laatst online: 04-07 23:09
Beste Tweakers

Ik ben voor de eerste keer aan de slag met PDO.
Heel simpel, ik probeer een user uit een database te halen.
Dit is m'n code:

code:
1
2
3
4
5
6
7
 public function getUser($id)
        {
            $stmt = $this->db_connection->prepare("SELECT * FROM users WHERE id = :id");
            $stmt->bindValue("id", $id);
            var_dump($stmt->fetchObject("User"));

        }


Ik krijg geen fout, ik krijg gewoon altijd false terug.
Dacht eerst dat het aan fetchObject zou liggen ofzo, dus probeer ik fetchAll(), maar dat geeft gewoon een lege array terug.

ik ben 100% zeker dat mijn id juist is. Ik krijg ook geen errors of iets.
Ik heb dan eens wachtwoord veranderd in script om te testen, dan krijg ik wel een error, dus de verbinding met de database is goed.

Iemand een idee waar mijn fout zou kunnen zitten?

Danku!

[ Voor 8% gewijzigd door Carharttguy op 15-06-2017 13:03 ]


Acties:
  • +1 Henk 'm!

  • CyBeRSPiN
  • Registratie: Februari 2001
  • Laatst online: 16:26

CyBeRSPiN

sinds 2001

Mis je niet gewoon de ->execute(); ?
Zie http://php.net/manual/en/pdo.prepare.php

En alvast een tip: gebruik niet * om lukraak ALLE kolommen te selecteren. Selecteer alleen datgene wat je nodig hebt in je functie.

[ Voor 95% gewijzigd door CyBeRSPiN op 15-06-2017 13:08 ]


Acties:
  • 0 Henk 'm!

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Je moet inderdaad execute() uitvoeren.
Aangezien dat een suffe fout is waar je soms wel even tijd aan kwijt bent om hem te vinden bouw ik in mijn database-klassen vaak een check in die een exception gooit als je een fetch()-functie aanroept zonder dat je execute() hebt uitgevoerd. Zo kom je er sneller achter.

Acties:
  • 0 Henk 'm!

  • Carharttguy
  • Registratie: Juli 2010
  • Laatst online: 04-07 23:09
Dank voor de execute(), was ik helemaal vergeten :')
CyBeRSPiN schreef op donderdag 15 juni 2017 @ 13:04:
Mis je niet gewoon de ->execute(); ?
Zie http://php.net/manual/en/pdo.prepare.php

En alvast een tip: gebruik niet * om lukraak ALLE kolommen te selecteren. Selecteer alleen datgene wat je nodig hebt in je functie.
Maarja, om een class te fetchen uit de database heb ik wel altijd alle kolommen nodig, want een user object is een 1 op 1 afspiegeling van de database.
Radiant schreef op donderdag 15 juni 2017 @ 13:17:
Je moet inderdaad execute() uitvoeren.
Aangezien dat een suffe fout is waar je soms wel even tijd aan kwijt bent om hem te vinden bouw ik in mijn database-klassen vaak een check in die een exception gooit als je een fetch()-functie aanroept zonder dat je execute() hebt uitgevoerd. Zo kom je er sneller achter.
Interessant, mag ik vragen hoe je zoiets doet?

Acties:
  • 0 Henk 'm!

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Je kan met PDO::setAttribute het attribuut PDO::ATTR_STATEMENT_CLASS instellen op een klasse die je zelf hebt gemaakt (overerven van PDOStatement). Daarna zullen de PDO-functies zoals prepare() een object van je eigen klasse returnen ipv. een PDOStatement.

Hierin override je dan execute() (hierin zet je een vlaggetje dat execute is uitgevoerd) en de fetch()-functies waarin je checkt of dat vlaggetje wel staat; anders gooi je een exception. Aan het einde van je functie doe je dan 'return parent::execute(..)' enzovoort om het transparant te laten werken.