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);
我已经尝试了 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);