2014-04-15 29 views
1

你好,我有一個問題,mysqli_error是空白類

當我mysqli_query錯誤mysqli_error爲空或不顯示任何錯誤消息。

例子:

<?php 
class xD 
{ 
    function s() 
    { 
     $conn = mysqli_connect('localhost','root','','arena'); 

     return $conn; 
    } 
} 

class xP extends xD 
{ 
    function a() 
    { 
     $query = "SELECT name FROM mytable"; 

     $result = mysqli_query($this->s(), $query) or die("Error in the consult..: " . mysqli_error($this->s())); 
    } 
} 

$a = new xP(); 

$a->a(); 
?> 

OUTPUT:

錯誤在協商..:

我該怎麼辦?

謝謝。

回答

1

您每次需要引用連接時都會創建一個全新的數據庫連接。

這將是更好的傳遞給你的類的連接,並將其存儲爲一個屬性:

class xD 
{ 
    protected $conn; 
    public function __construct($conn){ 
     $this->conn = $conn; 
    } 
} 

class xP extends xD 
{ 
    public function __construct($conn) 
    { 
     parent::__construct($conn); 
    } 

    function a() 
    { 
     $query = "SELECT name FROM mytable"; 

     $result = mysqli_query($this->conn, $query) or die("Error in the consult..: " . mysqli_error($this->conn)); 
    } 
} 

傳遞在構造函數中的連接,並從屬性$this->conn引用它:

// create the connection (maybe in a bootstrap?) 
$conn = mysqli_connect('localhost','','',''); 

$a = new xP($conn); 
$a->a(); 
+0

有用。但是在調用課程時沒有其他方式沒有$ conn。 $ a = new xP()? – Enalds

+0

最好將依賴關係傳遞給對象,而不是讓它創建自己的依賴關係。看看依賴注入,它使單元測試更容易。您可以創建一個工廠來創建新的xP對象並處理傳遞連接,因此您不必一直寫'$ a = new xP($ conn)',而是可以像'$ a = $ factory-> createXp()'。 – MrCode

+0

好了。謝謝。 – Enalds