2009-12-10 5 views
0

Je fais le "test-class" suivant fait à la volée: http://sumoin.pastebin.com/ff744ea4 Pas de réglage fin ou autre chose, juste un bref essai de classe pdo.PDO et PDOStatement, affectations magiques

Et je le test.php: http://sumoin.pastebin.com/d70dcb4ec

La chose drôle est:

L'objet PDOStatement ne revient jamais directement et je il ne fait jamais attribué à $this->handler->stmt

mais l'exécution $stmt->execute() fonctionne aussi bien que si tout va bien. Mais si j'utilise $this->handler->stmt->someMethod je reçois l'erreur suivante:

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

(bindParam est juste un exemple)

je l'ai déjà vérifié la requête, et il n'a pas d'erreurs dans, j'essayé d'utiliser « bindValue()", n'a pas fonctionné. J'ai essayé d'utiliser des entiers au lieu de ': nom' pour assigner des valeurs aux paramètres. J'ai couru la requête pure à travers le $this->handler->query() et cela a fonctionné.

Où se situe le problème? Je ne veux pas affecter mon objet PDOStatement pendant l'exécution, je veux qu'il fasse partie de la classe, lorsque la méthode "-> prepare()" est appelée.

Des idées? S'il vous plaît ne me frappez pas s'il y a un doublon là-bas, mais je n'ai rien trouvé qui m'a aidé.

Information:

  • PHP5.2
  • PDO Extensions etc. installed
  • Apache2
  • MySQL5.1 (matching to the PDO version)
+0

MISE À JOUR: J'ai essayé d'utiliser une référence '$ this-> stmt = & $ this-> Händler-> prepare(). Provoque toujours la même erreur. –

Répondre

0

Solution/Solution:

public function prepare($query) 
{ 
    return $this->handler->prepare($query); 

    //$stmt->setFetchMode(PDO::FETCH_ASSOC); // standard 
    //return $this->stmt; 
} 

public function getStatement($query) 
{ 
    $this->stmt = $this->prepare($query); 
} 
+0

Cela fonctionne, cependant, je ne sais pas pourquoi, mais après un brainstrom tout en étant assis sur les toilettes/wc, j'ai eu cette idée;) –

Questions connexes