인터넷정보

mysql query 관련 class

알 수 없는 사용자 2007. 10. 16. 16:25

아래 소스는 MySQL 접속 및 쿼리에 필요한 Class 입니다.

MySQL 사용시 필요한 모든 함수를 사용할 수 있도록 할 수도 있지만...

가장 많이 쓰이는 query 부분만이라도 좀 더 쉽게 구연하고자 만들었습니다.


사용방법은 간단합니다.


<?

include_once "Mysql.class.php";

$sq = new Mysql("아이디","비밀번호","디비명");


$sq_id = $sq->Query("select * from test","",__FILE__,__LINE__);

while($rows = $sq->Fetch("fa",$sq_id)) {
   echo $rows[no]."<br>";
}

?>


위 소스를 간단히 설명하겠습니다.


1. 개체 생성과 동시에 아이디, 비밀번호, 디비명을 이용해서 MySQL 계정에 접속합니다.

2. query() 메소드를 사용하여 쿼리를 실행합니다.

 - 메소드 실행시 메소드는 결과가 저장된 아이디(번호)를 반환합니다.

 - 중요한 쿼리 뒷쪽 3개의 인수에 주목하세요...^^

 - 쿼리 바로 뒤에는 "" 이렇게 아무것도 입력하지 않았는데요. 이건 조금 있다가 설명하고...

 - __FILE__ 은 PHP 기본 상수로서 현재 스크립트가 실행 중인 파일명을 저장하고 있습니다.

 - __LINE__ 도 역시 PHP 기본 상수로서 실행중인 줄번호를 저장하고 있습니다.

 - 위 정보는 쿼리 에러 발생시 에러 발생 위치를 출력하기 위함입니다.

 - 자 그럼 위에서 잠깐 언급한 두번째 인수는 위에 예제가 아닌 아래 예제를 보세요.


<?

$info = $sq->Query("select * from test","fa",__FILE__,__LINE__);


echo $info[name];

echo $info[age];

?>


위 예제에서 보는 것과 같이 쿼리를 실행하고 mysql_fetch_array() 까지 적용해서 $info 라는 변수에 저장이 된 것입니다. 두번째 인수로 "fa" 를 입력했는데 이것이 바로 mysql_fetch_array() 에서 mysql 을 뺀 나머지의 줄임말입니다. (fetch_array => fa , fetch_row => fr)


3. Query() 메소드가 반환한 id(번호)를 이용해서 Fetch 를 적용할 수 있습니다.

위에 첫번째 예제에 있는 것과 같이...


while($rows = $sq->Fetch("fa",$sq_id)) {
   echo $rows[no]."<br>";
}


이렇게 사용이 가능합니다. 이것은 일반 코딩에서...


while($rows = mysql_fetch_array($result)) {
   echo $rows[no]."<br>";
}


위 소스와 동일합니다.


자 그런데 한가지 의문점이 생깁니다. 쿼리를 한번 실행하기 위해서는


$sq->Query("실행쿼리","",__FILE__,__LINE__);


이렇게 길게 적어야 하는데 좀 쉽게 할 수 없을까요?

당연히 할 수 있습니다. 현재 어떤 에디터를 사용하시는지는 모르겠지만...

저의 경우 Editplus 를 사용합니다. 에디트 플러스에 있는 기능 중 '자동완성'이란 기능이 있습니다.

(도구->기본설정->파일:설정및 구문강조 메뉴에 보시면 자동완성이란 부분이 있으며 파일이 지정되어 있습니다. 확장자가 'acp' 인 파일이지요. 만약 지정된 파일이 없다면 http://www.editplus.co.kr 에 가셔서 php 관련 파일을 받으신 후 설정하시면 되겠습니다.)


이 '자동완성'이란 기능은 쉽게 말해 긴문장을 짧게 사용할 수 있도록 해주는 것이라고 말할 수 있겠습니다.


간단한 예로...acp 파일에...


#T=qu
query("^!","","",__FILE__,__LINE__);


이렇게 설정해 놓으시면 editplus 에서

'qu'입력후 스페이스바를 한번 누르면...

query("커서위치","","",__FILE__,__LINE__); 이렇게 출력이 된다는 것입니다.

참고로 '^!' 이 부분에 커서가 위치되지요.


이런 식으로 설정해서 사용하시면 코딩시 상당히 편하답니다...^^

자 이제 긴 설명을 끝내며 Mysql.class.php 파일 내용을 적겠습니다.

그럼 즐거운 하루되세요.


파일명 : Mysql.class.php


<?
/***********************************************************************

                                      MySQL Class

                                                                  최초작성일 : 2003-12-24
                                                                  최종수정일 : 2003-12-24

***********************************************************************/



class Mysql {
   var $result = array();

   /* 함수설명   :   MySQL 에 접속
      인수       :   $user : 사용자아아디
                     $pass : 비밀번호
                     $db   : 사용 db명
                     $host : 호스트명 기본 localhost
   */
   function Mysql($user, $pass, $db, $host="localhost") {
      if($this->CheckStr($host)) $host = "localhost";
      if($this->CheckStr($user)) $this->Error("MySQL 계정 사용자 아이디가 지정되지 않았습니다.");
      else if($this->CheckStr($pass)) $this->Error("MySQL 계정 비밀번호가 지정되지 않았습니다.");
      else if($this->CheckStr($db)) $this->Error("MySQL 계정 DB명이 지정되지 않았습니다.");
      else {
         mysql_connect($host, $user, $pass) || die("MySQL 계정 접속에 실패했습니다.");
         mysql_select_db($db) || die($db." 선택에 실패했습니다.");
      }
   }

   /* 함수설명   :   $str 이 공백문자인지 확인
      인수       :   $str : 확인할 문자열
      return     :   공백일 경우 true , 정상문자일 경우 false
   */
   function CheckStr($str) {
      if(!ereg("([^[:space:]]+)",$str)) return true;
      else return false;
   }

   /* 함수설명   :   $str 출력 후 exit;
      인수       :   $str : 출력할 메세지
   */
   function Error($str) {
      echo "
      <table align=center width=100% height=100% border=0 cellspacing=0 cellpadding=0>
      <tr>
         <td align=center>
            <br>====================== MySQL Error Message Start ======================<br><br>
               ".$str."<br>
            <br><br>====================== MySQL Error Message End =======================<br>
         </td>
      </tr>
      </table>
      ";
      exit;
   }

   /* 함수설명   :   Mysql 쿼리에러 발생시 에러문과 해당 파일과 라인을 출력함
      인수       :   $file : __FILE__ (PHP 기본 변수)
                     $line : __LINE__ (PHP 기본 변수)
   */
   function QueryError($file="",$line="") {
      echo "
      <table align=center width=100% height=100% border=0 cellspacing=0 cellpadding=0>
      <tr>
         <td align=center>
            <br>====================== MySQL Query Error Message Start ======================<br><br>
            <table align=center>
               <tr>
                  <td>
                        에러번호 : ".mysql_errno()."<br>에러내용 : ".mysql_error()."<br>";
      if($file) echo "에러파일 : ".$file."<br>";
      if($line) echo "에러라인 : ".$line."<br>";
               echo "
                  </td>
               </tr>
            </table>
            <br><br>====================== MySQL Query Error Message End =======================<br>
         </td>
      </tr>
      </table>
      ";
      exit;
   }

   /* 함수설명   :   Query 실행 함수
      인수       :   $str : 실행 할 쿼리문
                     $option : fr -> fetch_row, fa -> fetch_array, ff -> fetch_field, nr -> num_rows, nf -> num_fields
                     $file : 에러발생시 표시할 파일이름 ('__FILE__' 기본 PHP 함수)
                     $line : 에러발생시 표시할 라인번호 ('__LINE__' 기본 PHP 함수)
                     $db : 쿼리시 기본 DB가 아닐경우 쿼리가 실행될 DB 설정
      return     :   쿼리문 결과ID (옵션에 따라 결과 값이 반환되기도 함.)
   */
   function Query($str,$option='',$file=__FILE__,$line=__LINE__,$db='') {
      $id = count($this->result);
      $id = (!$id) ? 1 : $id+1;
      $this->result[$id] = ($db) ? mysql_db_query($db,$str):mysql_query($str);
      if(!$this->result[$id]) $this->queryError($file,$line);
      if($option) return $this->Fetch($option,$id);
      else return $id;
   }

   /* 함수설명   :   MySQL Resource#ID 를 이용해서 fetch 시킴
      인수       :   $option : fr -> fetch_row, fa -> fetch_array, ff -> fetch_field, nr -> num_rows, nf -> num_fields
      return     :   fetch 된 값
   */
   function Fetch($option, $id="") {
      if(!$id) $id = 1;
      if($option == 'fr') return mysql_fetch_row($this->result[$id]);
      else if($option == 'fa') return mysql_fetch_array($this->result[$id]);
      else if($option == 'ff') return mysql_fetch_field($this->result[$id]);
      else if($option == 'nr') return mysql_num_rows($this->result[$id]);
      else if($option == 'nf') return mysql_num_fields($this->result[$id]);
      else return $this->result[$id];
   }
}

?>

반응형