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

PDO og php - Kald til en medlemsfunktion prepare() på et ikke-objekt

@papaja ramte sømmet lige på hovedet. Din PDO-forbindelse mislykkedes, så du har ikke et PDO-objekt at køre forberedelsesmetoden på.

Fra toppen af ​​mit hoved tror jeg, at du mangler slutcitatet på $dsn-strengen. Du vil sandsynligvis tilføje følgende efter $this->dbname og før semikolon:

. "'"

Det er et enkelt citat pakket ind i dobbelte anførselstegn. Jeg bruger følgende syntaks til at oprette DSN-strengen:

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

Uanset hvad, opret en testfil, så du ved præcis, hvad problemet er. Testfilen skulle se sådan ud:

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

Bemærk, at vi ikke kører instansieringen af ​​PDO-objektet i en try catch-blok. Mens du ville aldrig nogensinde gør det i produktionen, vil det være nyttigt til din test, fordi det vil give en fatal undtagelse, der indeholder alle detaljerne om din forbindelse.

Instantiér nu testklassen, og fortsæt med at fejlfinde de fejl, du modtager. Igen vil de være mere detaljerede end den tidligere fejl, fordi det vil være en ufanget BOB-undtagelse.



  1. Hvordan får man den næste værdi af SQL Server-sekvens i Entity Framework?

  2. Hvorfor har self.object i en CreateView ikke et id efter at have gemt i databasen?

  3. Sådan får du det korte månedsnavn fra en dato i MySQL

  4. Bedste praksis flersproget hjemmeside