首页  >  文章  >  后端开发  >  为什么我的 PHP 代码会抛出'在非对象上调用成员函数准备()”错误,如何修复它?

为什么我的 PHP 代码会抛出'在非对象上调用成员函数准备()”错误,如何修复它?

Barbara Streisand
Barbara Streisand原创
2024-11-24 05:45:11719浏览

Why does my PHP code throw a

在非对象上调用成员函数prepare()

您的PHP代码触发一条错误消息,指示您正在尝试访问prepare()方法一个不存在的物体。让我们深入研究提供的代码来识别此错误的来源:

$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();

错误源于 $DBH 变量的范围。在 selectInfo() 函数中,您尝试访问 $DBH 而不指定其范围。由于 $DBH 未在函数内定义,因此无法直接访问它。

要解决此问题,您有多种选择:

1。使用全局关键字:

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

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

2.将 $DBH 作为函数参数传递:

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

3.创建一个函数来检索 $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();
}

通过实现这些选项之一,您将在 selectInfo() 函数中为 $DBH 建立正确的范围,从而允许它访问必要的数据库连接。

以上是为什么我的 PHP 代码会抛出'在非对象上调用成员函数准备()”错误,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn