2013-12-16 74 views
0

我剛開始使用OOP,並同時使用教程中,我遇到了以下錯誤:OOP PHP錯誤而查詢的MySQL

Warning: Missing argument 2 for MySQLDatabase::query(), called in 
/Applications/MAMP/htdocs/object-oriented/public/index.php on line 7 and defined in 
/Applications/MAMP/htdocs/object-oriented/includes/database.php on line 28 

Notice: Undefined variable: sql in 
/Applications/MAMP/htdocs/object-oriented/includes/database.php on line 29 

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in 
/Applications/MAMP/htdocs/object-oriented/includes/database.php on line 29 

這裏是我的database.php中

<?php 

require('config.php'); 

class MySQLDatabase { 

    public $connection; 

    public function open_connection() { 
     $this->$connection = mysqli_connect('DB_SERVER', 'DB_USER', 'DB_PASS'); 
     if (!$this->connection) { 
      die("Database connection failed"); 
     } else { 
      $db_select = mysqli_select_db($this->connection, DB_NAME); 
      if (!$select_db) { 
       die("Database selection failed"); 
      } 
     } 
    } 

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

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

和我index.php我試圖測試query()方法。

$sql = "INSERT INTO users (id, username, password, first_name, last_name) "; 
$sql .= "VALUES (1, 'andrei', 'password', 'Andrei', 'Popa')"; 
$result = $database->query($sql); 

$sql = "SELECT * FROM users WHERE id = 1"; 
$result_set = $database->query($sql); 
$found_user = mysqli_fetch_array($result_set); 
echo "Found user!" . $found_user['username']; 

任何想法我做錯了什麼?謝謝

+0

你的查詢功能需要兩個參數。你傳遞了一個 - 雖然你不需要傳遞'$ connection',因爲它從來沒有用過(你使用的是對象的$ connection屬性) – andrewsi

+0

閱讀錯誤消息,它們看起來相當清晰 – 2013-12-16 19:42:43

回答

1
public function query($connection, $sql) { 

你不需要第一個參數,因爲連接是你的類的屬性。因此,只有通過$sql到查詢方法,你已經在使用該方法時所做的:

public function query($sql) { 
+0

修正了。現在我得到警告:mysqli_query()期望參數1爲mysqli,null在/ Applications/MAMP/htdocs/object-oriented/includes/database中給出。php 29行 –

1

這是你的定義:

public function query($connection, $sql) { 

,這是您的來電:

$result = $database->query($sql); 

你需要添加連接:)

0

您有多個錯誤:

首先

$db_select = mysqli_select_db($this->connection, DB_NAME); 
if (!$select_db) { 

檢查varibables db_selectselect_db

public function query($connection, $sql) { 

$result = $database->query($sql); 

你需要檢查你的論點。我想,你需要刪除的聲明$連接

public function query($sql) { 

,因爲接下來你使用類變量:

$this->connection; 

public function open_connection() 

存在沒有counstructor你並且您不會調用方法open_connection,因此:您的活動連接是NULL

您需要將此方法添加到您的類:

function __construct() { 
    open_connection(); 
} 
+0

修復了這個問題,對不起$ select_db,typo。在使用構造方法後,我最終得到: '致命錯誤:調用未定義的函數open_connection()在/Applications/MAMP/htdocs/object-oriented/includes/database.php在59行# –

+0

對不起,'$ this - > open_connection();的原因。 – BaBL86