PDO and php - Call to a member function prepare() on a non-object

前端 未结 2 767
你的背包
你的背包 2021-01-23 13:14

I started learning PDO and im still a bit of a PHP novice. Im doing a project to increase my knowledge but im stuck at the first hurdle.

Im getting this error: Call to a

2条回答
  •  面向向阳花
    2021-01-23 13:36

    @papaja hit the nail right on the head. Your PDO connection failed, thus you do not have a PDO object to run the prepare method on.

    Off the top of my head, I think you are missing the end quote on the $dsn string. You probably want to add the following after $this->dbname and before the semi-colon:

    . "'"
    

    That's a single quote wrapped in double quotes. I use the following syntax to create the DSN string:

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

    Anyway, create a test file so that you know exactly what the problem is. The test file should look like this:

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

    Note that we are not running the instantiation of the PDO object within a try catch block. While you would never ever do that in production, it will be useful for your test because it will throw a fatal exception containing all of the details of your connection.

    Now instantiate the test class and proceed by debugging the errors you receive. Again, they will be more detailed than the previous error because it will be an uncaught PDO exception.

提交回复
热议问题