PHP에서 "비객체 오류에 대해 멤버 함수 prepare() 호출 -object" 오류는 객체가 아닌 변수에 대해 prepare() 메서드를 호출하려고 하면 발생합니다. 이는 일반적으로 변수가 mysqli 클래스의 인스턴스를 참조하지 않거나 mysqli 개체가 제대로 초기화되지 않은 경우에 발생합니다.
문제 이해
제공된 코드에서는 selectInfo() 함수 호출 시 $DBH 변수가 mysqli 클래스의 객체로 초기화되지 않습니다. 이것이 오류가 발생하는 이유입니다. 이 문제를 해결하려면 다음 접근 방식 중 하나를 사용할 수 있습니다.
접근 방법 1: 전역 범위 사용
global $DBH; function selectInfo($limit, $offset) { $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?"); }
이 접근 방식은 $DBH를 전역 변수로 선언합니다. , selectInfo() 함수 내에서 액세스할 수 있습니다. 그러나 전역 변수 오염으로 이어질 수 있으므로 모범 사례로 간주되지 않습니다.
접근 방법 2: 객체를 매개변수로 전달
function selectInfo($DBH, $limit, $offset) { $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?"); } selectInfo($DBH, 10, 20);
이 접근 방법은 직접 전달합니다. mysqli 객체를 selectInfo() 함수의 매개변수로 사용합니다. 이는 더 명시적이며 객체가 적절하게 초기화되도록 보장합니다.
접근 방식 3: 데이터베이스 도우미 함수 사용
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 ?,?"); }
이 접근 방식은 도우미 함수를 사용하여 검색합니다. mysqli 객체를 삭제하고 필요한 경우 초기화합니다. selectInfo()를 호출할 때 객체를 항상 사용할 수 있도록 보장합니다.
접근 방식 4: 데이터베이스 클래스 사용
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 ?,?");
이 접근 방식은 데이터베이스 연결을 수업. 명세서에 액세스하고 준비하는 깔끔하고 구조화된 방법을 제공합니다.
위 내용은 PHP에서 \'비객체에 대한 prepare() 멤버 함수 호출\' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!