2015-05-04 75 views
0

我一直在尝试一切超过4小时,并将错误固定到此代码段。你能告诉我这里可能有什么错吗?Php Mysqli内部错误

<?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(); 
?> 
+0

'tbl_restaurants'删除。引用和尝试。不要删除第一个和最后一个报价 –

+0

@anantkumarsingh它们不是引号。 –

+1

从哪里获得变量'$ db_servername' ...?可能是这些变量的范围是原因。 –

回答

0

我认为$db_servernamedatabase.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; 
} 
+1

OMG!谢谢你,兄弟! –

0

您假定数据库连接的详细信息,但没有从任何地方获取。

数据库未连接。

$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){ 

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

类模型{

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); 
+0

你能进一步解释一下吗? *编辑:刚刚尝试了你说的,仍然没有工作。 –

0

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

<?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(); 
0

假设数据库详细信息是问题,您可以将它们全局化,也可以不使用变量,而是使用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); 
0

试试这个

<?php 
include_once 'database.php'; 

class Model { 

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


    public function output($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, $db_username, $db_password, $db_name, $db_port); 
?>