2015-05-04 4 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' Удалить. цитаты и try.Don't удалить первую и последнюю цитату –

+0

@anantkumarsingh, они не кавычки. –

+1

Откуда вы получаете переменные '$ db_servername' ...? Может быть, сфера этих переменных является причиной. –

ответ

0

Я полагаю $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; 
} 
+1

OMG! СПАСИБО, МУЖИК! –

0

Вы принимаете данные о соединении с базой данных, но не получаете откуда-либо.

База данных не подключается.

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

Pass его в явном виде:

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

ИЛИ установить их в качестве переменных класса и установить его с помощью конструктора:

класса Model {

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'); 

И тогда вместо того, чтобы использовать $ db_servername в новом MySQLi (функции, вы могли бы сделать:

$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); 
?>