Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PDO và php - Gọi đến một hàm thành viên chuẩn bị () trên một đối tượng không phải

@papaja đánh ngay cái đinh vào đầu. Kết nối PDO của bạn không thành công, do đó bạn không có đối tượng PDO để chạy phương thức chuẩn bị.

Tôi nghĩ bạn đang thiếu dấu ngoặc kép trên chuỗi $ dsn. Bạn có thể muốn thêm phần sau vào sau $ this-> dbname và trước dấu chấm phẩy:

. "'"

Đó là một câu trích dẫn đơn được gói gọn trong dấu ngoặc kép. Tôi sử dụng cú pháp sau để tạo chuỗi DSN:

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

Dù sao, hãy tạo một tệp thử nghiệm để bạn biết chính xác vấn đề là gì. Tệp thử nghiệm sẽ giống như sau:

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

Lưu ý rằng chúng tôi không chạy quá trình khởi tạo đối tượng PDO trong khối try catch. Trong khi bạn sẽ không bao giờ thực hiện điều đó trong quá trình sản xuất, nó sẽ hữu ích cho thử nghiệm của bạn vì nó sẽ tạo ra một ngoại lệ nghiêm trọng chứa tất cả các chi tiết về kết nối của bạn.

Bây giờ khởi tạo lớp thử nghiệm và tiếp tục bằng cách gỡ lỗi các lỗi bạn nhận được. Một lần nữa, chúng sẽ chi tiết hơn lỗi trước đó vì nó sẽ là một ngoại lệ PDO chưa được ghi nhận.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. App Engine và MySQL

  2. hiển thị dữ liệu từ sql khi nhấp vào bản đồ svg

  3. Nối các hàng dưới dạng mảng từ một bảng khác cho mỗi hàng

  4. Lưu ý:Chuyển đổi mảng thành chuỗi trong

  5. Làm cách nào để thay đổi một cột và thay đổi giá trị mặc định?