Php Mysqli 内部错误

Php Mysqli internal error

我已经尝试了 4 个多小时,并将错误确定为这段代码。你能告诉我这里可能有什么问题吗?

<?php
include_once 'database.php';

class Model {

    public $db;
    public $data;
    public $data_item = array();


    public function output(){
      $this->db = new mysqli($db_servername, $db_username, $db_password, $db_name, $db_port);
      $this->data = $this->db->query('SELECT * FROM `tbl_restaurants`');
      while($row = $this->data->fetch_assoc()){

            $this->data_item['res_id'] = $row['res_id'];

        }

        return $this->data_item['res_id'];
    }

}
$obj = new Model;
echo $obj->output();
?>

您正在假定数据库连接详细信息,但无法从任何地方获取。

数据库未连接。

$this->db = new mysqli($db_servername, $db_username, $db_password, $db_name, $db_port);

明确传递为:

public function output($db_servername, $db_username, $db_password, $db_name, $db_port){

或将它们设置为 class 变量并通过构造函数设置:

class型号{

public $db;
public $data;
public $data_item = array();
public $db_servername;
public $db_username;
public $db_password;
public $db_name;
public $db_port;

并将它们作为:

public function output(){
  $this->db = new mysqli($this->db_servername, $this->db_username, $this->db_password, $this->db_name, $db_port);

$db_servername、$db_username、$db_password、$db_name、$db_port未在class中定义。试试这个:

<?php
include_once 'database.php';

class Model {

    public $db;
    public $data;
    public $data_item = array();


    public function output(){
      global $db_servername, $db_username, $db_password, $db_name, $db_port;
      $this->db = new mysqli($db_servername, $db_username, $db_password, $db_name, $db_port);
      $this->data = $this->db->query('SELECT * FROM `tbl_restaurants`');
      while($row = $this->data->fetch_assoc()){

            $this->data_item['res_id'] = $row['res_id'];

        }

        return $this->data_item['res_id'];
    }

}
$obj = new Model;
echo $obj->output();

我假设 $db_servername 来自 database.php

为此你需要 global:

public function output(){
    global $db_servername, $db_username, $db_password, $db_name, $db_port;
    $this->db = new mysqli($db_servername, $db_username, $db_password, $db_name, $db_port);
    //...
}

更好的设计是,将数据库连接作为参数提供给模型:

public function __construct($db) {
    $this->db = $db;
}

假设数据库细节是问题所在,您可以将它们全局化,或者您可以不使用变量,而是使用 database.php

中的定义

而不是 $db_servername = "localhost";等等。你可以这样做:

define('DB_SERVERNAME','localhost');

然后不在新的 mysqli( 函数中使用 $db_servername,而是:

$this->db = new mysqli(DB_SERVERNAME, DB_USERNAME, DB_PASSWORD, DB_NAME, DB_PORT);