-
-
/** - * MySQL 읽기-쓰기 분리 클래스
- * $db_config = array(
- * 'master' => array('host'=>'localhost:3306','user'=>' admin ','passwd'=>'123456','db'=>'stat'),
- * 'slave' => array(
- * array('host'=>'localhost : 3307','user'=>'admin','passwd'=>'123456','db'=>'stat'),
- * array('host'=>'localhost: 3308 ','user'=>'admin','passwd'=>'123456','db'=>'stat')
- * )
- * );
- *
- * 참고: 슬레이브가 여러 개인 경우 무작위로 연결하세요
- * 최종 편집: bbs.it-home.org
- */
- /*
- $db_config = 배열(
- '마스터' => array('host'=>'localhost:3306','user'=>'admin','passwd'=>'123456','db'=>' stat'),
- '슬레이브' => array(
- array('host'=>'localhost:3307','user'=>'admin','passwd'=>'123456 ','db'=>'stat'),
- array('host'=>'localhost:3308','user'=>'admin','passwd'=>'123456', 'db'=>'stat')
- )
- );
$db = MySQL::getInstance('','r-w');< ;/p>
$sql = "관리자에서 * 선택";
$rs = $db->query($sql);
- while ($row = $db->fetch($rs)){
- echo "uid:".$row['uid']." ".$row['userName']."
";
- }
echo " ";
- */
class MySQL
- {
- private static $_instance = null;//数据库连接实例
- private static $_master = null;//主数据库连接实例
- private static $_slave = null;//중요数据库连接实
-
- public $_config = array();//数据库连接配置信息
- public $_res = null;//查询实例句柄
- public $_flag = '';//标识当前语句是主还是重数据库上执行
- public $_link = null;
-
- /**
- * 单实例
- * 여기에 설명을 입력하세요...
- * @paramknown_type $dbname
- * @paramknown_type $mode
- */
- public static function & getInstance($dbname='',$mode='rw '){
- if (is_null(self::$_instance)){
- self::$_instance = new self();
- self::$_instance->__getConf();
- self::$_instance->connect($dbname,$mode);
- }
-
- return self::$_instance;
- }
/**
- * 데이터베이스 구성 정보 가져오기
- * 여기에 설명을 입력하세요...
- */
- 공용 함수 __getConf(){
- 전역 $db_config;
- $this->_config['master'] = $db_config['master'];
- $this->_config['slave'] = $db_config['slave'];
- }
-
- /**
- * 데이터베이스 연결
- * 여기에 설명을 입력하세요...
- * @param $dbname은 연결할 데이터베이스 이름을 기본적으로 지정합니다.
- * @param $mode rw는 연결 기본 라이브러리를 나타내고 r-w는 읽기 및 쓰기 분리를 의미합니다
- */
- 공개 함수 connect($dbname='' ,$mode = 'rw'){
- if($mode == 'rw'){
- if(is_null(self::$_master)){
- $this->_master = $this ->_slave = $this->conn_master($dbname);
- }
- }else{
- if(is_null(self::$_master)){
- $this->_master = $this->conn_master($dbname);
- }
- if(is_null(self::$_slave)){
- $this->_slave = $this->conn_slave($dbname );
- }
- }
- }
-
- /**
- * 메인 데이터베이스 서버에 연결
- * 여기에 설명을 입력하세요...
- */
- 공개 함수 conn_master($dbname=''){
- $_link = mysql_connect( $this->_config['master']['host'],$this->_config['master']['user'],$this->_config['master']['passwd'] ,true) 또는 종료("Connect ".$this->_config['master']['host']." 실패.");
- mysql_select_db(empty($dbname)?$this->_config ['master']['db']:$dbname,$_link) 또는 die(" DB 이름 ".$this->_config['master']['db']."가 존재하지 않습니다.") ;
- mysql_query("set names utf8",$_link);
- return $_link;
- }
-
- /**
- * 슬레이브 데이터베이스 서버에 연결
- * 여기에 설명을 입력하세요...
- */
- 공개 함수 conn_slave($dbname=''){
- $offset = rand(0,count($this->_config['slave') ])-1);
- $_link = @mysql_connect($this->_config['slave'][$offset]['host'],$this->_config['slave'][$offset ]['user'],$this->_config['slave'][$offset]['passwd'],true) 또는 die(" 연결 ".$this->_config['slave'][$ offset]['host']." 실패.");
- mysql_select_db(empty($dbname)?$this->_config['slave'][$offset]['db']:$dbname,$ _link) 또는 die(" DB 이름 ".$this->_config['slave'][$offset]['db']."가 존재하지 않습니다.");
- mysql_query("set names utf8" ,$_link);
- $_link 반환
- }
/**
- * 데이터베이스 쿼리 실행
- * 여기에 설명을 입력하세요...
- * @param string $sql
- */
- 공개 함수 쿼리($sql,$master=true){
if($master == true || (substr(strtolower($sql),0,6) != 'select') && $master == false){
- $this->_res = mysql_query($sql ,$this->_master);
- if(!$this->_res){
- $this->_error[] = mysql_error($this->_master);
- }
- $this->_flag = '마스터';
- $this->_link = $this->_master;
- } else {
- $this->_res = mysql_query($sql ,$this->_slave);
- if(!$this->_res){
- $this->_error[] = mysql_error($this->_slave);
- }
- $this->_flag = 'slave';
- $this->_link = $this->_slave;
- }
return $this->_res;
- }
-
- /**
- * 단일 레코드 행 가져오기
- * 여기에 설명 입력 ...
- * @param 혼합 $rs
- */
- 공용 함수 get($rs=''){
- if(empty($rs) ){
- $rs = $this->_res;
- }
- return mysql_fetch_row($rs);
- }
-
- /**
- * 여러 줄 레코드 가져오기
- * 여기에 설명을 입력하세요 ...
- * @param mix $rs
- * @param $result_type
- */
- 공용 함수 fetch($rs = ''){
- if(empty($rs)){
- $rs = $this->_res;
- }
- return mysql_fetch_array($rs,MYSQL_ASSOC );
- }
-
- /**
- * 데이터 삽입
- * 여기에 설명을 입력하세요...
- * @paramknown_type $sql
- */
- 공용 함수 add($sql){
- $rs = $this->query($sql);
- if($rs)
- return mysql_insert_id($this->_link);
- return false;
- }
-
- /**
- * 데이터 업데이트
- * 여기에 설명을 입력하세요...
- * @paramknown_type $sql
- */
- 공개 함수 업데이트 ($sql){
- if(empty($sql)) return false;
- $rs = $this->query($sql);
- if($rs)
- return $this ->fetchNum();
- return false;
- }
/**
- * 이전 명령문의 영향을 받은 행 수 가져오기
- * 여기에 설명 입력...
- */
- 공용 함수 fetchNum(){
- return mysql_affected_rows($this->_link);
- }
-
- /**
- * 소멸자, 데이터베이스 연결 리소스 해제
- * 여기에 설명을 입력하세요...
- */
- 공개 함수 __destruct(){
- mysql_close($this->_link);
- }
- }
-
复主代码
|