2016-07-29 3 views
0

Mysqli_result 클래스는 결과 집합에서 여러 행을 행 배열로 반환하는 메서드를 가지고 있습니다. 행은 이미 필드 배열이므로 2 차원 배열입니다. 또한 결과 집합에는 메서드 형태로 단일 행을 반환하는 fetch_object() 메서드가 있습니다.mysqli_result를 확장하고 새 메서드를 추가하는 방법

이제 mysqli_result 클래스를 확장하고 연관 키가 레코드 ID [id => Object()] 인 객체의 연관 배열을 반환하는 새 메서드 fetch_objects() (복수형)을 추가하고 싶습니다. 물론, mysqli 클래스도 확장해야하고 확장 된 결과 집합을 반환하기 위해 query() 메서드를 재정의해야 할 것이다. 하지만 mysqli와 mysqli_result 사이의 연결 및 쿼리 매개 변수가 어떻게 전달되는지 알 수 없다.

이 방식으로 작동한다 :

$db=new ReallyMySQLi(...); //initiating my mysqli 

$myrst=$db->query($SQL); //returned my extended result 

//fetch_objects() returning associative array of objects 
//with record ID as associative key 
foreach($myrst->fetch_objects() as $id=>$object) 
{ 
    echo 'Customer ID:'.$id; //or $object->id; 
    echo 'Customer firstname:'.$object->firstname; 
    echo 'Customer lastname:'.$object->lastname; 
} 

답변

1

나는 mysqli_result의 PHP 설명서에이를 발견하고 몇 가지를 만지작 거렸다. 나는 시도하지 않았다.

class Database_MySQLi extends MySQLi 
{ 
    public function query($query) 
    { 
     $this->real_query($query); 
     return new Database_MySQLi_Result($this); 
    } 
} 

class Database_MySQLi_Result extends MySQLi_Result 
{ 
    public function fetch_objects() 
    { 
     $rows = array(); 
     while($row = $this->fetch_object()) 
     { 
      $rows[$row->id] = $row; 
     } 
     return $rows; 
    } 
} 

그리고 사용이

$db=new Database_MySQLi(...); //initiating my mysqli 

$myrst=$db->query($SQL); //returned my extended result 

//fetch_objects() returning associative array of objects 
//with record ID as associative key 
foreach($myrst->fetch_objects() as $id=>$object) 
{ 
    echo 'Customer ID:'.$id; //or $object->id; 
    echo 'Customer firstname:'.$object->firstname; 
    echo 'Customer lastname:'.$object->lastname; 
} 
+0

나에게 수치심 나는이 메모 (althoufg 검색에 시간을 보냈다)를 어떻게 찾지 못했는지 정말로 모른다. 그러나, 나는이 코드를 테스트했고 작동한다 !!! 그러나 나는 아직도 그것이 일하는 방법을 얻지 않는다! !! Database_MySQLi 내부의'$ this-> real_query ($ query)'명령은 무슨 일을합니까? 또한 mysqli가'return new Database_MySQLi_result ($ this)'를 발행하면 mysqli_result가 확장되어 result에 인수로 전달되지만 result의 생성자에는 매개 변수가 없다! 나는 아직도 혼란스러워! – sbrbot

+0

나는 real_query에 대해서도 모른다. 그냥 지나가고 작은 연구를하고 이것을 보았습니다. 그냥 나눌 수 있다고 생각 했어. 하나님은 공개적이지만 문서화되지 않은 변수와 방법을 구하십시오! 어쩌면 그는 단지 mysqli_result 클래스를'var_dump '하고 이것들을 발견했다. –

+0

'query()'메소드 대신'real_query()'를 사용하는 것이 중요합니다! 나는이 코드 **가'$ this-> query ($ query)'와 함께 작동하지 않음을 테스트했다. real_query는 쿼리를 실행하고 결과를 데이터베이스 (버퍼되지 않은 결과 - mysqli의 포인터 만 저장)에 남겨 둡니다.이 결과는 나중에 사용되거나 저장되어야합니다. – sbrbot

-1

죄송 것, 나는 2 년 MySQL의 드라이버로 mysqli 사용하지 않습니다. 하지만이 추천서를드립니다.

PDO를 선택할 수 있습니다. PDO는 다중 데이터베이스 드라이버만큼 멋집니다.

laravel eloquent와 마찬가지로 doctrine도 PDO를 기초로 사용합니다.

$pdo = new PDO('sqlite:db.sqlite'); 
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

행운을 빈다!

관련 문제