2014-02-05 211 views
0

Goodday,Php mysqli數據庫連接失敗?

我收到一個奇怪的錯誤。

這是我的代碼:

<?php 
$con=mysqli_connect("localhost","root","","testdatabase"); 

class database{ 
    public function select($tableName){ 
     $result = mysqli_query($con,"SELECT * FROM ".$tableName);  
    }  
} 

$database = new database(); 
?> 

錯誤消息是,$ con是一個不確定的變量。但是我在第2行定義了$ con?

當我var_dump控制它也說NULL。

我到底做錯了什麼?

+1

您不能在類中使用全局變量。 –

回答

3

如果你想訪問的方法或函數的$騙子變種,你必須是全球化代碼內:

public function select($tableName){ 
    global $con; 
    $result = mysqli_query($con,"SELECT * FROM ".$tableName);  
} 

但你不應該這樣做,是全局邪惡 !

這是你的代碼應該是這樣:

<?php 
class database{ 
    protected $con; 

    public function __construct($host, $user, $password, $dbname){ 
     $this->con = mysqli_connect($host, $user, $password, $dbname); 
    } 

    public function select($tableName){ 
     $result = mysqli_query($this->con,"SELECT * FROM ".$tableName);  
    }  
} 

$database = new database("localhost", "root", "", "testdatabase"); 
?> 
+0

通過您的整個應用程序使用單個連接而無需共享將會超級,超級慢。 – tadman

+0

PHP中沒有連接池。 –

+0

PHP乞討不同:[mysqli中的持久連接](http://www.php.net/manual/en/mysqli.persistconns.php)。 – tadman

1

連接$con在全局範圍內可用。你可能想要做的是在數據庫對象的構造函數中注入你的mysql連接(以mysqli對象的形式)。下面是一個簡單的例子:

<?php 
$mysqli= new mysqli("localhost","root","","testdatabase"); 

class database{ 
    protected $mysqli = null; 
    public function __contruct(MySQLI $mysqli = NULL) { 
     $this->mysqli = $mysqli; 
    } 

    public function select($tableName){ 
     $result = $this->mysqli->query("SELECT * FROM ".$tableName);  
    }  
} 

$database = new database($mysqli); 
?> 

注意,因爲你試圖去用面向對象的範例,你還不如用mysqli的面向對象的方式。

+0

對我來說,在構造函數中聲明連接而不是創建依賴關係更有意義。 –

+0

@kasperTaeymans依賴注入更加靈活。這樣你就不會將你的類與任何特定的DB連接邏輯聯繫起來。你可以傳遞你的系統可能實例化的任何mysqli對象,並將它傳遞給這個類。 –

0

爲您的類添加一個構造函數並在此函數內聲明您的連接。

class database{ 
    private $con; 
    public function __construct(){ 
     $this->con=mysqli_connect("localhost","root","","testdatabase"); 
    } 
    public function select($tableName){ 
     $result = mysqli_query($this->con,"SELECT * FROM ".$tableName);  
    }  
} 

$database = new database(); 
1

你不能使用類中的全局變量。

<?php 

    class database { 

     private $con; 
     public $result; 

     public function select($tableName){ 
      $this->con = mysqli_connect("localhost","root","","testdatabase"); 
      $this->result = mysqli_query($this->con,"SELECT * FROM ".$tableName);  
     }  
    } 

    $database = new database(); 

    // do something with result 
    if($database->result) { 
     echo "Query returned something!"; 
    } 
?>