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
올바르게 보려면 두 번 보아라. 그리고 아름답게 보려면 한 번만 보아라. (아미엘)