Database

MySQL DB Class

컨텐츠 정보

본문

송효진님 소스
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
// +--------------------------------------------------------+
// | PHP version 4.3.x                                      |
// +--------------------------------------------------------+
// | Copyright (c) 2003 Song Hyo-Jin                        |
// +--------------------------------------------------------+
// | This source file is GPL.                              |
// +--------------------------------------------------------+
// | Author : Song Hyo-Jin <crosser at hanmail dot net>    |
// |                                  (MSN Messengerable)  |
// +--------------------------------------------------------+
//
// $Id: mysql.inc, v 0.01 2004/01/15 11:40:00 crosser Exp $
//
// MySQL database control

/*
$test = new MyDB('access_file.ini', [transaction bool]);
$test->query('sql query');
$test->close();
$data = mysql_fetch_object($test->result);

Want query error report
$test->err_report = true;
$test->query('sql query');

With transaction
$test = new MyDB('access_file.ini', true);
$test->query('sql query');
$test->query('sql query');
$test->query('sql query');
if(not good)
    $test->close_error('error message');
// or exit('error message'); auto rollback;

access_file.ini

ip = localhost
user = sql_user
pass = sql_pass
db = sql_db
*/

// MySQL Unsigned Limit
define('MyBIGINT', '18446744073709551615');
define('MyINT', 4294967295);
define('MyMEDIUMINT', 16777215);
define('MySMALLINT', 65535);
define('MyTINYINT', 255);

$db_set_file = array();

class MyDB
{
    var $conn, $transaction, $result, $err_report, $query_count;

    function MyDB($db_setting, $transaction = false)
    {
        $this->err_report = false;
        $this->transaction = $transaction;
        $this->query_count = 0;
        static $db_set_file = array();

        if(false === array_key_exists($db_setting, $db_set_file))
            $db_set_file[$db_setting] = parse_ini_file($db_setting);
        $myset = &$db_set_file[$db_setting];
        $this->conn = mysql_connect($myset['ip'], $myset['user'], $myset['pass']) or exit('mysql_connect error');
        mysql_select_db($myset['db'], $this->conn) or exit('mysql_select_db error');
        if($transaction) {
            mysql_query('SET AUTOCOMMIT=0', $this->conn) or exit('mysql_transaction_autocommit error');
            mysql_query('BEGIN', $this->conn) or exit('mysql_transaction_begin error');
            register_shutdown_function(array(&$this, 'close_error'));
        }
        return true;
    }

    function close()
    {
        if($this->transaction)
            mysql_query('COMMIT', $this->conn) or exit('mysql_transaction_commit error');
        mysql_close($this->conn) or exit('mysql_close error');
        $this->conn = false;
        return true;
    }

    function close_error($message = 'mysql_error exit')
    {
        if($this->transaction)
            mysql_query('ROLLBACK', $this->conn) or exit('mysql_transaction_rollback error');
        mysql_close($this->conn) or exit('mysql_close_error error');
        exit($message);
        return true;
    }

    function query($query)
    {
        $this->query_count ++;
        $this->result = mysql_query($query, $this->conn) or $this->close_error($this->err_report?'query < '.$query.' > error (count : '.$this->query_count.' ) : '.mysql_error($this->conn):'query error (count : '.$this->query_count.' )');
        return true;
    }
}

?>

사용법--------------------------------------------------

연결
$test = new MyDB('access_file.ini');

트랜잭션용 연결
$test = new MyDB('access_file.ini', true);

쿼리
$test->query('sql query');

종료 (트랜잭션시 자동 COMMIT)
$test->close();

받아온값
$data = mysql_fetch_object($test->result);

오류출력 원할시
$test->err_report = true;
$test->query('error query');

오류있을시에 종료 (트랜잭션시 자동 ROLLBACK)
$test->close_error('error message');

exit() 만 해도 무조건 ROLLBACK (아마 $test->close() 안하고 종료되도 ROLLBACK)

mysql_insert_id 등의 함수 사용시에 $test->conn 링크 사용.
$idx = mysql_insert_id($test->conn);


거친마루 -----------------------------------------
저는 설정파일을 config.conf.php 형태로 네이밍합니다
파일은
;<?/*
[section]
variable = value
;*/?>)
형태로 저장합니다.
웹에서 접근하면 ;) 요거만 출력되죠

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
“무릇 물이란 지세를 따라 흐르되 작은 틈도 놓치지 않고 적시니 지혜를 갖춘 자와 같고, 움직이면서 아래로 흘러가니 예를 갖춘 자와 같으며, 어떤 깊은 곳도 머뭇거리지 않고 들어가니 용기를 가진 자와 같고 장애물이 막혀서 갇히면 고요히 맑아지니 천명을 아는 자와 같으며, 험한 곳을 거쳐 멀리 흐르지만 끝내 남을 허물어뜨리는 법이 없으니 덕을 가진 자와 같다. 천지는 이것으로 이루어지고, 만물은 이것으로 살아가며, 나라는 이것으로 안녕을 얻고, 만사는 이것으로 평안해지며, 만물은 이것으로 바르게 되는 것이다. 이것이 지혜로운 자가 물을 좋아하는 이유이다.” (한영, <<한시외전>>)