Rumah > pembangunan bahagian belakang > tutorial php > Mengapa saya mendapat ralat \'Panggilan kepada Fungsi Ahli menyediakan() pada Bukan Objek\' dalam PHP?

Mengapa saya mendapat ralat \'Panggilan kepada Fungsi Ahli menyediakan() pada Bukan Objek\' dalam PHP?

Patricia Arquette
Lepaskan: 2024-11-25 20:07:12
asal
536 orang telah melayarinya

Why am I getting a

Panggil ke Fungsi Ahli Prepare() pada Ralat Bukan Objek dalam PHP

Dalam PHP, "Panggilan kepada fungsi ahli prepare() pada bukan -object" berlaku apabila anda cuba memanggil kaedah prepare() pada pembolehubah yang bukan objek. Ini biasanya berlaku apabila pembolehubah tidak merujuk kepada contoh kelas mysqli atau apabila objek mysqli tidak dimulakan dengan betul.

Memahami Isu

Dalam anda kod yang disediakan, pembolehubah $DBH tidak dimulakan sebagai objek kelas mysqli apabila anda memanggil fungsi selectInfo(). Inilah sebabnya anda menghadapi ralat. Untuk menyelesaikan isu ini, anda boleh menggunakan mana-mana pendekatan berikut:

Pendekatan 1: Gunakan Skop Global

global $DBH;
function selectInfo($limit, $offset) {
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
}
Salin selepas log masuk

Pendekatan ini mengisytiharkan $DBH sebagai pembolehubah global , membolehkan anda mengaksesnya dalam fungsi selectInfo(). Walau bagaimanapun, ia tidak dianggap sebagai amalan terbaik kerana ia boleh membawa kepada pencemaran berubah-ubah global.

Pendekatan 2: Lulus Objek sebagai Parameter

function selectInfo($DBH, $limit, $offset) {
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
}
selectInfo($DBH, 10, 20);
Salin selepas log masuk

Pendekatan ini secara langsung melepasi objek mysqli sebagai parameter kepada fungsi selectInfo(). Ia lebih jelas dan memastikan objek dimulakan dengan betul.

Pendekatan 3: Gunakan Fungsi Pembantu Pangkalan Data

function getDBH() {
    static $DBH = null;
    if (is_null($DBH)) {
        $DBH = new mysqli("host", "test", "123456", "dbname");
    }
    return $DBH;
}

function selectInfo($limit, $offset) {
    $DBH = getDBH();
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
}
Salin selepas log masuk

Pendekatan ini menggunakan fungsi pembantu untuk mendapatkan semula objek mysqli dan mulakannya jika perlu. Ia memastikan bahawa objek sentiasa tersedia apabila memanggil selectInfo().

Pendekatan 4: Gunakan Kelas Pangkalan Data

class Database {
    private $DBH;

    public function __construct($host, $user, $pass, $dbname) {
        $this->DBH = new mysqli($host, $user, $pass, $dbname);
    }

    public function prepare($sql) {
        return $this->DBH->prepare($sql);
    }
}

$db = new Database("host", "test", "123456", "dbname");
$stmt = $db->prepare("SELECT * FROM information LIMIT ?,?");
Salin selepas log masuk

Pendekatan ini merangkum sambungan pangkalan data dalam kelas. Ia menyediakan cara yang bersih dan berstruktur untuk mengakses dan menyediakan penyata.

Atas ialah kandungan terperinci Mengapa saya mendapat ralat \'Panggilan kepada Fungsi Ahli menyediakan() pada Bukan Objek\' dalam PHP?. 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