【问题标题】:Warning: mysqli_query(): Couldn't fetch mysqli in <file> on line <number>警告:mysqli_query():无法在 <number> 行的 <file> 中获取 mysqli
【发布时间】:2023-03-29 01:24:01
【问题描述】:

视图文件

<?php

require('OrderModel.php');

session_start();

if(!isset($_SESSION['orderModel'])){
    $newModel = new OrderModel();
    $_SESSION['orderModel'] = $newModel;
} else{
    $newModel = $_SESSION['orderModel'];
}

$newModel->addToBasket(1, 30);
echo $newModel->getItemName($newModel->basket[0][0]);
?>

OrderModel 文件(简化)

class OrderModel{

public $basket;
public $orderDate;
public $orderTime;
public $sent;
public $dbc;
public $customerOrderID;

public function __construct()
{
    $this->dbc = require_once('../../db/config.php');
    $this->basket = [];
}

public function addToBasket($itemNumber, $itemQuantity){
    array_push($this->basket, [$itemNumber, $itemQuantity]);
}

public function getItemName($itemNum){
    $query = "SELECT ItemName FROM item WHERE ItemID = $itemNum;";
    $r = mysqli_query($this->dbc, $query); //Line 31
    if($r){
        return mysqli_fetch_row($r)[0];
    }else{
        echo mysqli_error($this->dbc); //Line 35
    }
}

我可以确认 config.php 文件肯定配置正确并且正在与数据库通信。无论如何,代码是:

<?php
define ('username', 'root');
define ('password', 'root');
define ('server', '127.0.0.1');
define ('database', 'alberto');

$dbc = mysqli_connect(server, username, password, database) OR DIE ('Could not connect to MySQL: ' . mysqli_connect_error());

mysqli_set_charset($dbc, 'utf8');

return $dbc;
?>

我从视图文件中收到以下错误消息:

警告:mysqli_query():Could't fetch mysqli in D:\UniServerZ\www\alberto\app\models\OrderModel.php on line 31

警告:mysqli_error():Could't fetch mysqli in D:\UniServerZ\www\alberto\app\models\OrderModel.php on line 35

我怀疑错误与会话有关,但我似乎无法从目前发布的主题中找到任何答案。

请多多指教。谢谢。

【问题讨论】:

  • var_dump($this-&gt;dbc) 显示什么?
  • 该错误意味着$this-&gt;dbc不是一个有效的mysqli对象。
  • 你在脚本的其他地方有require_once('../../db/config.php')吗?由于您使用require_once,因此只会执行第一个。使用require 而不是require_once

标签: php mysqli


【解决方案1】:

Barmar 是正确的,$this->dbc 不是有效的 mysqli 对象。您正在将 require_once 与文件一起使用,就像函数一样。使 config.php 成为一个类,并从那里建立数据库连接。有关我所指内容的示例,请参见此处。 https://gist.github.com/jonashansen229/4534794

【讨论】:

  • 谢谢,我明白你的意思了。一个有点相关的问题:每个文件都需要数据库信息($dbc = ...)吗?如果是这样,“每个文件”的定义是什么?
  • 好问题!是和不是。是的,数据库连接需要在您需要进行查询时随时可用。你如何做到这一点是“否”的来源。就个人而言,我喜欢使用 psr-4 自动加载器来映射类并根据具体情况使它们可用。现在,您可以做的是拥有一个包含所有关键类(如会话管理和 dbconnections)的“主”要求文件,然后要求该“主”文件。
  • 我问的原因是我做了一个黑客工作。在我的视图文件中,我有: dbc = $GLOBALS['dbc'];
猜你喜欢
  • 2014-09-18
  • 2015-01-23
  • 2014-08-14
  • 2016-09-07
  • 2020-02-07
  • 2017-02-28
  • 2015-06-14
相关资源
最近更新 更多