2014-01-24 22 views
-1

嗨我有一些問題使用OO PHP連接到我的數據庫。我的腳本在下面。我一直在這一段時間。這只是一個測試腳本,因爲我對OOP相當陌生。請不要苛刻通過PHP中的OOP連接到數據庫和活動

class Database{ 

    public $mysqli, 
     $host, 
     $username, 
     $password, 
     $db; 

    public function __construct($host, $username, $password, $db){ 

     $this->host = $host; 
     $this->username = $username; 
     $this->password = $password; 
     $this->db = $db; 

    $mysqli = new mysqli($host, $username, $password, $db); 
     if (!$mysqli){ 
      echo "error in connecting to database"; 
     } 
     else{ 
      echo "success in connecting to database"; 
     } 
    } 

    public function query(){ 
     $result = $mysqli->query("SELECT * FROM inventory"); 
     if ($result) { 
      printf("Select returned %d rows.\n", $result->num_rows); 

      $result->close(); 
     } 
     else{ 
      echo "there is an error in query"; 
      $result->close(); 
     } 
     //echo "in query function"; 
    } 
} 

用法......

$DB = new Database('localhost', 'root', 'xxxx', 'yyyy'); 
$DB -> query(); 
+1

如果你*「有一些問題」 *,你需要添加的所有可用信息在你的問題。 **描述問題和症狀**否則它很難診斷。 – Phil

回答

1

你的主要問題是,你是不是存儲值到類$mysqli屬性。您需要在構造函數和查詢方法中使用$this->mysqli而不是$mysqli

其次,這個類增加了沒有mysqli類還沒有。你還不如簡單地使用

$DB = new mysqli('localhost', 'root', 'xxxx', 'yyyy'); 

if ($DB->connect_error) { 
    throw new Exception($DB->connect_error, $DB->connect_errno); 
} 
+0

這是更好的pdo或mysqli> – gkalikapersaud

+0

@ user2128444這完全是主觀的。我認爲PDO有一個更清潔的API,但是有一些MySQL功能只能通過MySQLi使用,所以你可以根據你將如何使用連接來選擇。 – Phil

-3

試試這個:

$connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME); 

// Test if connection succeeded 
if(mysqli_connect_error()){ 
    die("Database connection failed: " . 
     mysqli_connect_error() . 
     " (" . mysqli_connect_errno() . ")" 
    ); 
} 
+1

是不是程序? – gkalikapersaud

0

的問題是,你正在訪問的類屬性,而不$this$mysqli應該在$this->mysqli的構造函數中。

您正在使用的mysqli財產對象mysqli

然後你就可以在查詢功能由$this->mysqli->query("SELECT * FROM inventory")使用mysqli的屬性對象(在數據庫類)的查詢功能。

更新的代碼:

<?php 
class Database{ 

    public $mysqli, 
     $host, 
     $username, 
     $password, 
     $db; 

public function __construct($host, $username, $password, $db){ 

    $this->host = $host; 
    $this->username = $username; 
    $this->password = $password; 
    $this->db = $db; 

$this->mysqli = new mysqli($host, $username, $password, $db); 

    /* check connection */ 
    if ($this->mysqli->connect_errno) { 
     printf("Connect failed: %s\n", $this->mysqli->connect_error); 
     exit(); 
    } else { 
     echo "success in connecting to database"; 
    } 
} 

public function query(){ 
    $result = $this->mysqli->query("SELECT * FROM inventory"); 
    if ($result) { 
     printf("Select returned %d rows.\n", $result->num_rows); 

     $result->close(); 
    } 
    else{ 
     echo "there is an error in query"; 
     $result->close(); 
    } 
    //echo "in query function"; 
} 
} 

$DB = new Database('localhost', 'root', 'xxxx', 'yyyy'); 
$DB -> query(); 
+0

失敗的'mysqli'構造函數不會計算爲* falsey *值。你需要檢查'mysqli :: $ connect_error' /'mysqli :: $ connect_errno'的值 – Phil

+0

@Phil感謝您的更新......我更新了它...... :) – Vasu