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

Barbara Streisand
发布: 2024-11-24 05:45:11
原创
739 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板