[PHP5.0] 클래스 내에서 PEAR DB를 이용하여 데이터베이스를 이용하는 방법에 대해..

kirrie의 이미지

계속 함수만 사용하다가 이번에 클래스를 공부하면서 클래스를 실무에 적용시켜 보려고 하고 있습니다.

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를 이용하여 데이터베이스를 사용하고 싶다.

입니다.

답변에 미리 감사드리면서..

꼬마앙마의 이미지

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";
}
?>

myPassion의 이미지

왜냐하면 fetchRow는 PEAR::DB의 query메서드를 실행시키면 리턴되는 DB_Result객체에 있기 때문입니다.

그러므로 __call 이라는 매직메서드를 사용해 PEAR::DB를 캡슐화 시키는 동시에 없는 메서드들은 바로 $db에 메서드를 델리게이션하는 것이 좋다고 생각합니다.

--------------------------------
http://www.elegantcoder.com

myPassion의 이미지

위에 이어서..

혹시 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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.