sql >> Database >  >> RDS >> Mysql

PDO en php - Oproep naar een lidfunctie prepare() op een niet-object

@papaja slaat de spijker precies op zijn kop. Uw PDO-verbinding is mislukt, dus u hebt geen PDO-object om de voorbereidingsmethode op uit te voeren.

Uit mijn hoofd, ik denk dat je het eindcitaat op de $ dsn-reeks mist. U wilt waarschijnlijk het volgende toevoegen na $this->dbname en vóór de puntkomma:

. "'"

Dat is een enkel aanhalingsteken verpakt in dubbele aanhalingstekens. Ik gebruik de volgende syntaxis om de DSN-string te maken:

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

Maak in ieder geval een testbestand aan zodat je precies weet wat het probleem is. Het testbestand zou er als volgt uit moeten zien:

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

Merk op dat we de instantie van het PDO-object niet uitvoeren binnen een try-catch-blok. Terwijl je nooit doe dat in productie, het zal nuttig zijn voor uw test omdat het een fatale uitzondering genereert die alle details van uw verbinding bevat.

Instantieer nu de testklasse en ga verder met het opsporen van fouten in de fouten die u ontvangt. Nogmaals, ze zullen gedetailleerder zijn dan de vorige fout omdat het een niet-afgevangen PDO-uitzondering zal zijn.



  1. Hoe de PostgreSQL-foutlogboeken te decoderen

  2. Efficiënte manier om alle rijen in een tabel bij te werken

  3. hoe voeg ik superprivileges toe aan de mysql-database?

  4. Hoe het type Doctrine TEXT te krijgen?