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
Mary-Kate Olsenasal
2024-11-25 02:27:10473semak imbas

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 ?,?");
  2. Luluskan Sambungan sebagai Parameter:

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

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

    fungsi selectInfo($limit, $offset){

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

    }

  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 ?,?");
        }
  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!

Kenyataan:
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