Mysql
 sql >> Database >  >> RDS >> Mysql

PDO e php - Chiama a una funzione membro prepare() su un non oggetto

@papaja ha colpito nel segno. La tua connessione PDO non è riuscita, quindi non hai un oggetto PDO su cui eseguire il metodo prepare.

In cima alla mia testa, penso che ti manchi la virgoletta finale sulla stringa $dsn. Probabilmente vorrai aggiungere quanto segue dopo $this->dbname e prima del punto e virgola:

. "'"

Questa è una virgoletta singola racchiusa tra virgolette doppie. Uso la seguente sintassi per creare la stringa DSN:

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

Ad ogni modo, crea un file di prova in modo da sapere esattamente qual è il problema. Il file di prova dovrebbe assomigliare a questo:

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);
    }
}

Si noti che non stiamo eseguendo l'istanza dell'oggetto PDO all'interno di un blocco try catch. Mentre tu mai e poi fallo in produzione, sarà utile per il tuo test perché genererà un'eccezione fatale contenente tutti i dettagli della tua connessione.

Ora istanzia la classe di test e procedi eseguendo il debug degli errori che ricevi. Di nuovo, saranno più dettagliati rispetto all'errore precedente perché sarà un'eccezione PDO non rilevata.