Rumah > pembangunan bahagian belakang > tutorial php > Mengapakah \'Panggilan kepada Fungsi Ahli menyediakan() pada Bukan Objek\' Berlaku dalam PHP dan Bagaimana Saya Boleh Membetulkannya?

Mengapakah \'Panggilan kepada Fungsi Ahli menyediakan() pada Bukan Objek\' Berlaku dalam PHP dan Bagaimana Saya Boleh Membetulkannya?

Mary-Kate Olsen
Lepaskan: 2024-11-25 02:27:10
asal
428 orang telah melayarinya

Why Does

Panggilan ke Fungsi Ahli sediakan() pada Bukan Objek: Bantuan PHP

Isu:

Ralat "Panggil ke fungsi ahli sediakan() pada bukan objek" berlaku apabila cuba memanggil kaedah pada objek yang tidak wujud.

Punca:

Coretan kod yang disediakan memulakan pembolehubah $DBH sebagai objek sambungan MySQLi baharu, tetapi gagal untuk menghantarnya sebagai parameter atau mengisytiharkan ia sebagai pembolehubah global dalam fungsi selectInfo(). Akibatnya, fungsi tidak boleh mengakses objek dan ralat dilemparkan.

Penyelesaian:

Untuk menyelesaikan isu ini, pertimbangkan pilihan berikut:

  1. Gunakan Global Kata kunci:

    • function selectInfo($limit, $offset){
        global $DBH;
        $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
      Salin selepas log masuk
  2. Luluskan Sambungan sebagai Parameter:

    • function selectInfo(MySQLi $DBH, $limit, $offset){
        $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
      Salin selepas log masuk
  3. Buat Fungsi untuk Mendapatkan Sambungan Pangkalan Data:

    • function getDBH(){
        static $DBH = null;
        if (is_null($DBH)) {
            $DBH = new mysqli(...);
        }
        return $DBH;
      }
      Salin selepas log masuk

    fungsi selectInfo($limit, $offset){

    $DBH = getDBH();
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
    Salin selepas log masuk

    }

  4. Buat Pembungkus Pangkalan Data Kelas:

    • class Database {
        private $conn;
      
        public function __construct(){
            $this->conn = new mysqli(...);
        }
      
        public function selectInfo($limit, $offset){
            $stmt = $this->conn->prepare("SELECT * FROM information LIMIT ?,?");
        }
      Salin selepas log masuk
  5. Gunakan Pustaka atau Rangka Kerja Pra-Bina:

    • Pertimbangkan untuk menggunakan perpustakaan atau rangka kerja yang mengendalikan akses pangkalan data, seperti Doktrin ORM, ADODB, atau rangka kerja lengkap seperti Zend.

Atas ialah kandungan terperinci Mengapakah \'Panggilan kepada Fungsi Ahli menyediakan() pada Bukan Objek\' Berlaku dalam PHP dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan