2014-04-15 2 views
1

안녕하세요 내가 가진 문제, 내가 mysqli_query 오류가 발생했습니다 때mysqli_error 클래스

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

종속성을 자체 종속성을 생성하지 않고 객체에 전달하는 것이 좋습니다. Dependency Injection을 살펴보면 유닛 테스트가 쉬워집니다. 새 xP 객체를 생성하고 연결을 처리하는 팩토리를 생성하여'$ a = new xP ($ conn)'를 계속 쓸 필요가 없도록 만들 수 있습니다. 대신 $ a = $ factory-> createXp()'. – MrCode

+0

알았어요. 고맙습니다. – Enalds

관련 문제