2016-09-22 46 views
1

我目前在學習PHP,而我是OOP的新手。我試圖創建一個對象來處理MySQL查詢和連接。PHP OOP學習曲線 - MySQL對象失敗

這是我創建至今:

class MySQLDatabase { 

    private $connection; 

    function __construct() { 
     $this->open_connection(); 
    } 

    public function open_connection() { 
     $this->connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME); 
     if(mysqli_connect_errno()) { 
      die(
       "Database connection failed: " . mysqli_connect_error() . 
       " (" . mysqli_connect_errno() . ")" 
      ); 
     } 
    } 

    public function close_connection() { 
     if(isset($this->connection)) { 
      mysqli_close($this->connection); 
      unset($this->connection); 
     } 
    } 

    public function query($sql) { 
     $cleaned_sql = mysqli::real_escape_string($sql); 
     $result = mysqli_query($this->connection, $cleaned_sql); 
     $this->confirm_query($result); 
     return $result; 
    } 

    public function mysql_prep($string) {   
     $escaped_string = mysqli_real_escape_string($this->connection, $string); 
     return $escaped_string; 
    } 

    private function confirm_query($result) { 
     if (!$result) { 
     die("Database query failed."); 
     } 
    } 
} 

而且在面向公衆的側(做一個測試,以確保一切按預期工作):

$sql = "INSERT INTO users (id, username, password, first_name, last_name) "; 
$sql .= "VALUES (1, 'jbloggs', 'secretpwd', 'Joe', 'Bloggs')"; 
$result = $database->query($sql); 

目前,我只是得到輸出: 數據庫查詢失敗。

這個問題似乎與我的mysql_prep函數有關,因爲當我刪除所有工作正常。

任何意見是非常歡迎。

在此先感謝! Alex。

+0

*:* - 你需要找出真正的錯誤是「目前,我只是得到的輸出數據庫查詢失敗。」 –

+0

@ Fred-ii-錯誤似乎與我的mysql_prep函數有關,因爲當這被刪除的東西似乎工作正常。 – FruitWinder

+0

你應該清理變量不是一個完整的查詢 – RiggsFolly

回答

2

您正在運行您的整個查詢通過轉義函數,這正是錯誤事情要做。這消除了查詢在語法上正確所需的任何引號。

考慮一下:

INSERT INTO foo (bar) VALUES ('baz') 

既然你逃避了整個事情,你可以發送此到數據庫:

INSERT INTO foo (bar) VALUES (\'bar\') 

因爲這些報價都逃跑,他們不報價了。它們是純文本字符,並且數據庫正在尋找名爲'bar'的字段以從中獲取值。您無法在記錄中查找字段以進行插入,因爲您正在插入記錄並且尚不存在。並且'bar'不太可能存在於您的表格定義中。

因此,您的查詢失敗,語法錯誤,並且由於您有一個固定/不變/無用的「失敗」的消息,你永遠不會被告知爲什麼失敗的原因。

你死()至少更改爲類似

die("Query failed: " . mysqli_error($this->connection)); 
+0

哎呦,急切的時刻。非常感謝,使得更多的意義和適當的注意:-) – FruitWinder