2014-09-20 3 views
1

Здание из учебника, которое я нашел в Интернете.Простой mySQLi выберите массив

Я пытаюсь выбрать все элементы из таблицы «items» и создать массив. Не уверен, как это должно работать. Это $result = $this->connection->query($q); является причиной этой проблемы.

<?php 
//DB.class.php 

class DB { 

    protected $db_name = 'dbname'; 
    protected $db_user = 'user'; 
    protected $db_pass = 'pass'; 
    protected $db_host = 'localhost'; 
    protected $connection; 

    public function connect() { 
    $connection = new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name); 

    // check connection 
    if ($connection->connect_error) { 
     trigger_error('Database connection failed: ' . $connection->connect_error, E_USER_ERROR); 
    } 

    } 

    public function resultToArray($result) { 
    $rows = array(); 
    while($row = $result->fetch_assoc()) { 
     $rows[] = $row; 
    } 
    return $rows; 
    } 

    public function sel($table) { 
    $q = "SELECT * FROM $table"; 
    $result = $this->connection->query($q); 
    $rows = $this->resultToArray($result); 

    return $rows; 

    $result->free(); 

    } 

} 
+0

Возможно, вы имеете в виду '$ this-> connection = new mysqli() ..' вместо просто '$ connetion = new mysqli() ...' then, 'return $ this ; ' – Ghost

ответ

0

Я думаю, что вы должны установить конструктор, но если вы не хотите, просто вернуть экземпляр этого первого и установить $this->connection свойство вместо $connection (нормальная переменная):

class DB { 

    protected $db_name = 'test'; 
    protected $db_user = 'test'; 
    protected $db_pass = 'test'; 
    protected $db_host = 'localhost'; 
    protected $connection; 

    public function connect() { 
     $this->connection = new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name); 
     // ^^ this one, not $connection 
    // check connection 

    if ($this->connection->connect_error) { 
     trigger_error('Database connection failed: ' . $connection->connect_error, E_USER_ERROR); 
    } 

     return $this->connection; // then return this 
    } 

    public function resultToArray($result) { 
    $rows = array(); 
    while($row = $result->fetch_assoc()) { 
     $rows[] = $row; 
    } 
    return $rows; 
    } 

    public function sel($table) { 
    $q = "SELECT * FROM $table"; 

    $result = $this->connection->query($q); 
        //^so that if you call this, you have the mysqli object 
    $rows = $this->resultToArray($result); 

    return $rows; 

    $result->free(); 

    } 

} 

$db = new DB(); // instantite, 
$db->connect(); // then connect, shouldn't have to have this if you put the connection automatically on construct 
$result = $db->sel('users'); // feed a valid existing table name 
echo '<pre>'; 
print_r($result); 
1

сделать функцию конструктов как

public $mysqli; 
    public function __construct() 
    { 
     $mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE); 
     $this->mysqli = $mysqli; 
    } 

public function sel($table,$whr) 
    { 
    $query = "SELECT * FROM ".$table." where id='$whr'"; 
    $result = $this->mysqli->query($query); 
    $total = array(); 
    while($row = $result->fetch_assoc()){ 
      //print_r($row);die; 
     $total[] = $row; 
    }//print_r($total);die; 
    return $total; 
    } 
+0

вы также можете посмотреть мой файл подключения http://codeinspired.wordpress.com/2014/03/07/how-to-make-oops-based-functions-file-in-php/ – truesource

Смежные вопросы