[PHP5.0] 클래스 내에서 PEAR DB를 이용하여 데이터베이스를 이용하는 방법에 대해..
글쓴이: kirrie / 작성시간: 금, 2006/07/21 - 11:21오전
계속 함수만 사용하다가 이번에 클래스를 공부하면서 클래스를 실무에 적용시켜 보려고 하고 있습니다.
DB Class로는 PEAR DB를 사용하려고 하고, 일단 테스트는 잘 완료하였습니다.
그리고 나서 제가 스스로 제작한 클래스 내에서 DB에 접근하여 쿼리를 던지고 값을 받아와야 할 필요가 있어서 스크립팅을 해보려는데 잘 안되는군요. 이를테면, 일단 제가 만든 클래스가 대충 아래와 같다고 할 때,
class SampleClass { var $Db; function __construct($Db) { $Sql = "SELECT * FROM SampleTbl;"; $Res = $Db->query($Sql); while($Row = $Res->fetchRow()) { print_r($Row); } } }
인스턴스 생성시 $Db 오브젝트를 넘겨주어서, 인스턴스를 생성하면서 SampleTbl에서 가져온 결과를 출력하는 것인데, $Db->query() 메소드는 잘 작동하면서도 fetchRow는 정의되지 않은 메소드라고 자꾸 나오는군요.
제가 클래스를 처음 배우다보니 여러 개념에 대해서는 정말 개념적으로밖에 모르고, 실제로 스크립팅하는데에는 익숙치가 않습니다. 제가 놓치고 있는 부분이나, 잘못 이해하고 있는 것이 있다면 좀 조언 부탁드립니다.
다시 제가 드리고 싶은 질문을 정리해보자면,
1. 현재 PEAR DB를 사용중이며
2. 자작한 클래스 내에서 PEAR DB를 이용하여 데이터베이스를 사용하고 싶다.
입니다.
답변에 미리 감사드리면서..
Forums:
fetchRow 예제 <?php//
fetchRow 예제
<?php
// Once you have a valid DB object named $db...
$res =& $db->query('SELECT * FROM mytable');
while ($row =& $res->fetchRow()) {
// Assuming DB's default fetchmode is
// DB_FETCHMODE_ORDERED
echo $row[0] . "\n";
}
?>
...
왜냐하면 fetchRow는 PEAR::DB의 query메서드를 실행시키면 리턴되는 DB_Result객체에 있기 때문입니다.
그러므로 __call 이라는 매직메서드를 사용해 PEAR::DB를 캡슐화 시키는 동시에 없는 메서드들은 바로 $db에 메서드를 델리게이션하는 것이 좋다고 생각합니다.
--------------------------------
http://www.elegantcoder.com
혹시
위에 이어서..
혹시 PEAR::isError($Res)를 해보셨는지요?
에러가 난 경우에 그런 메소드를 본 경우가 많은데요..
약간 수정하니 한번 확인해보세요.
<?php
function __construct($Db) {
$Sql = "SELECT * FROM SampleTbl;";
$Res = $Db->query($Sql);
if(PEAR::isError($Res)){
echo '에러발생!
';
var_export($Res);
exit;
}
while($Row = $Res->fetchRow()) {
print_r($Row);
}
}
?>
--------------------------------
http://www.elegantcoder.com
댓글 달기