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:
Gunakan Global Kata kunci:
function selectInfo($limit, $offset){ global $DBH; $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
Luluskan Sambungan sebagai Parameter:
function selectInfo(MySQLi $DBH, $limit, $offset){ $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?");
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 ?,?");
}
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 ?,?"); }
Gunakan Pustaka atau Rangka Kerja Pra-Bina:
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!