Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PDO dan php - Panggil ke fungsi anggota prepare() pada non-objek

@papaja kena paku tepat di kepala. Sambungan PDO Anda gagal, sehingga Anda tidak memiliki objek PDO untuk menjalankan metode persiapan.

Dari atas kepala saya, saya pikir Anda melewatkan kutipan akhir pada string $dsn. Anda mungkin ingin menambahkan yang berikut ini setelah $this->dbname dan sebelum titik koma:

. "'"

Itu adalah kutipan tunggal yang dibungkus dengan tanda kutip ganda. Saya menggunakan sintaks berikut untuk membuat string DSN:

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

Bagaimanapun, buat file uji sehingga Anda tahu persis apa masalahnya. File pengujian akan terlihat seperti ini:

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

Perhatikan bahwa kita tidak menjalankan instantiasi objek PDO dalam blok try catch. Meskipun Anda tidak akan pernah lakukan itu dalam produksi, ini akan berguna untuk pengujian Anda karena akan mengeluarkan pengecualian fatal yang berisi semua detail koneksi Anda.

Sekarang buat instance kelas pengujian dan lanjutkan dengan men-debug kesalahan yang Anda terima. Sekali lagi, mereka akan lebih detail daripada kesalahan sebelumnya karena itu akan menjadi pengecualian PDO yang tidak tertangkap.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Indeks MySQL untuk Grup Berdasarkan / Pesan Berdasarkan

  2. cara mengatur autocommit false secara global

  3. Transisi MySQL ke MySQLi paling sederhana

  4. DataTable dengan Ajax tidak berfungsi dengan baik setelah menggunakan serverSide:true

  5. Masalah memiliki banyak database?