Mysql
 sql >> Base de données >  >> RDS >> Mysql

PDO et php - Appel à une fonction membre prepare() sur un non-objet

@papaja a mis le doigt sur la tête. Votre connexion PDO a échoué, vous n'avez donc pas d'objet PDO sur lequel exécuter la méthode de préparation.

Du haut de ma tête, je pense qu'il vous manque le guillemet final sur la chaîne $dsn. Vous voudrez probablement ajouter ce qui suit après $this->dbname et avant le point-virgule :

. "'"

C'est un guillemet simple entouré de guillemets doubles. J'utilise la syntaxe suivante pour créer la chaîne DSN :

"mysql:host=$this->HOST;dbname=$this->DATABASE"

Quoi qu'il en soit, créez un fichier de test afin de savoir exactement quel est le problème. Le fichier de test devrait ressembler à ceci :

class TestDatabase{

    private $host      = DB_HOST;
    private $user      = DB_USER;
    private $pass      = DB_PASS;
    private $dbname    = DB_NAME;
    private $dbh;


    public function __construct(){

        $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;

        $options = array(
            PDO::ATTR_PERSISTENT    => true,
            PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION
        );

        $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
    }
}

Notez que nous n'exécutons pas l'instanciation de l'objet PDO dans un bloc try catch. Alors que vous ne le feriez jamais faites cela en production, cela vous sera utile pour votre test car cela lèvera une exception fatale contenant tous les détails de votre connexion.

Instanciez maintenant la classe de test et continuez en déboguant les erreurs que vous recevez. Encore une fois, elles seront plus détaillées que l'erreur précédente car il s'agira d'une exception PDO non interceptée.