在 PHP 中,“在非对象错误上调用成员函数prepare()”当您尝试对非对象的变量调用prepare()方法时,会发生“-object”错误。当变量不引用 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 中收到'在非对象上调用成员函数准备()”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!