Mengapakah kod PHP saya membuang ralat \'Panggilan kepada Fungsi Ahli menyediakan() pada Bukan Objek\' dan bagaimana saya boleh membetulkannya?

Barbara Streisand
Lepaskan: 2024-11-24 05:45:11
asal
716 orang telah melayarinya

Why does my PHP code throw a

Panggil ke Fungsi Ahli prepare() pada Bukan Objek

Kod PHP anda mencetuskan mesej ralat yang menunjukkan bahawa anda sedang cuba mengakses kaedah prepare() daripada objek yang tidak wujud. Mari kita mendalami kod yang disediakan untuk mengenal pasti punca ralat ini:

$DBH = new mysqli("host", "test", "123456", "dbname");

function selectInfo($limit, $offset) {
    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
    $stmt->bind_param("ii", $limit, $offset);
    $stmt->execute();
}

selectInfo();
Salin selepas log masuk

Ralat berasal daripada skop pembolehubah $DBH. Dalam fungsi selectInfo(), anda cuba mengakses $DBH tanpa menyatakan skopnya. Memandangkan $DBH tidak ditakrifkan dalam fungsi, ia tidak boleh diakses secara langsung.

Untuk menyelesaikan isu ini, anda mempunyai beberapa pilihan:

1. Gunakan Kata Kunci global:

function selectInfo($limit, $offset) {
    global $DBH;

    $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
    $stmt->bind_param("ii", $limit, $offset);
    $stmt->execute();
}
Salin selepas log masuk

2. Lulus $DBH sebagai Parameter Fungsi:

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

3. Cipta Fungsi untuk Mendapatkan $DBH:

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 ?,?");
    $stmt->bind_param("ii", $limit, $offset);
    $stmt->execute();
}
Salin selepas log masuk

Dengan melaksanakan salah satu daripada pilihan ini, anda akan mewujudkan skop yang betul untuk $DBH dalam fungsi selectInfo(), membenarkannya mengakses pangkalan data yang diperlukan sambungan.

Atas ialah kandungan terperinci Mengapakah kod PHP saya membuang ralat \'Panggilan kepada Fungsi Ahli menyediakan() pada Bukan Objek\' 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