当前位置: 首页 > 面试题库 >

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

詹正浩
2023-03-14
问题内容

我正在尝试编写一个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一个全局变量。因此,当您输入函数时,全局变量不可用。您有5个真实选择。

1.使用全局关键字

function doSomething() {
    global $DBH;
    //...

这不是一个好主意,因为它使维护和测试PITA成为可能。想象一下尝试调试该函数调用。现在,您需要找出$DBH定义在哪里,以试图找出正在发生的事情…

2.$DBH功能设定参数

function doSomething(MySQLi $DBH) {

它具有显式的优点。但这仍然不是很好,因为调用代码随后需要跟踪全局变量。

3.创建一个“获取”$DBH对象的函数

function getDBH() {
    static $DBH = null;
    if (is_null($DBH)) {
        $DBH = new mysqli(...);
    }
    return $DBH;
}

function doSomething() {
    $DBH = getDBH();
}

这具有完全解决全局变量问题的优点。但是也很难拥有多个连接或将任何代码重用于其他连接。

4.创建一个类来包装数据库访问

class Database {
    public function __construct($host, $user, $pass) {
        $this->DBH = new MySQli($host, $user, $pass);
    }
    public function doSOmething() {
        $this->DBH->foo();
    }
}

这将为您封装所有内容。所有数据库访问都将通过一个类,因此您无需担心全局变量访问或其他任何问题。

5.使用预先建立的课程/框架

这是最好的选择,因为您不必担心自己做。



 类似资料:
  • 问题内容: 我正在尝试在此准备好的语句中绑定变量,但我一直收到错误: 调用该函数,并将变量传递给它。当我更改函数以仅回显变量时,该变量会在页面上正常打印,但是如果我尝试在此处绑定它,则会收到错误。有人可以帮忙吗? 我知道函数没有完全写在这里,但这不应该是一个问题。我不明白为什么我会收到此错误。 问题答案: 正如错误消息所说,这似乎不是一个对象。尝试在您的prepare- call之后使用来调试它。

  • 问题内容: 此代码 出现错误 : 致命错误:在第42行的C:\ Users \ fel \ VertrigoServ \ www \ login \ validation.php中的非对象上调用成员函数prepare() 码: 可能的原因是什么? 另一个问题 是什么?抱歉,我是pdo的新手 问题答案: 未定义。您没有在函数内部声明它,也没有将其作为参数传递。 您需要将其传递(好),或在全局名称空间

  • 问题内容: 因此,我正在重构代码以实现更多的OOP。我设置了一个类来保存页面属性。 稍后,我像这样调用set_page_title()函数 当我收到错误消息时: 调用非对象上的成员函数set_page_title() 那我想念什么呢? 问题答案: 这意味着它不是对象的实例。我们可以看到您用来初始化变量的代码吗? 当您期望特定的对象类型时,还可以使用PHP的类型提示功能 Docs 在违反逻辑时得到错

  • 问题内容: 我的查询有问题。我最近改用了PDO,这对我来说是新的。现在,我需要在查询中使用JOIN来从另一个表中获取数据,而无需执行两次执行。 问题是,我收到此错误: 我不明白问题是什么。这是我的代码的样子: 或简称为查询: 我想要的是,从用户ID为session且请求为0的朋友那里获取所有行。但是然后我想获取用户中那些朋友的ID,以便我可以链接到他们的个人资料。注意 感谢您提供任何反馈意见,不必

  • 这是一个奇怪的问题,我只是在没有任何正确堆栈跟踪的情况下得到了以下错误。你知道怎么解释根本原因吗? 生产错误:异常“Symfony\Component\Debug\exception\FatalErrorException”,在/var/www/mobiletopshou/vendor/laravel/framework/src/illumb/Routing/Router中显示消息“调用非对象上的

  • 请帮帮我 致命错误:在第104行的/home/u357965800/public_html/include/class.admin.php中对非对象调用成员函数prepare()