sql >> Base de Datos >  >> RDS >> Mysql

PDO y php:llamada a una función miembro prepare () en un no objeto

@papaja dio en el clavo justo en la cabeza. Su conexión PDO falló, por lo que no tiene un objeto PDO para ejecutar el método de preparación.

En mi cabeza, creo que te estás perdiendo la comilla final en la cadena $dsn. Probablemente desee agregar lo siguiente después de $this->dbname y antes del punto y coma:

. "'"

Esa es una comilla simple entre comillas dobles. Uso la siguiente sintaxis para crear la cadena DSN:

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

De todos modos, crea un archivo de prueba para que sepas exactamente cuál es el problema. El archivo de prueba debería verse así:

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

Tenga en cuenta que no estamos ejecutando la creación de instancias del objeto PDO dentro de un bloque try catch. Mientras que nunca jamás haga eso en producción, será útil para su prueba porque arrojará una excepción fatal que contiene todos los detalles de su conexión.

Ahora crea una instancia de la clase de prueba y continúa depurando los errores que recibes. Nuevamente, serán más detallados que el error anterior porque será una excepción de PDO no detectada.