<?php class DummyMySQLClass{
var $DBHost = ''; /* 数据库主机名称 */ var $DBUser = ''; /* 数据库用户名称 */ var $DBPswd = ''; /* 数据库密码 */ var $DBName = ''; /* 数据库名称 */
var $Result = NULL; /* private */ var $LinkId = NULL; /* private */ var $Record = NULL; /* 包含一条记录的内容 */ var $Rows = 0;
var $MustBeHalt = true; /* 有了错误立即停止 */ var $RecordCase = NULL; /* 只在 nextRecord() 和 f()方法里出现 */
function DummyMySQLClass($DBHost = '', $DBUser = '', $DBPswd = '', $DBName = '', $newLink = false){ if(is_array($DBHost)){ $DBHost = $DBHost[0]; $DBUser = $DBHost[1]; $DBPswd = $DBHost[2]; $DBName = $DBHost[3]; $newLink = empty($DBHost[4])?false:$DBHost[4]; }elseif(str_replace(array("/", "@"), array("", ""), $DBHost) != $DBHost){ $dsn = $this->splitDSN($DBHost);
$DBTpye = $dsn[0]; $DBHost = $dsn[1].":".$dsn[2]; $DBUser = $dsn[3]; $DBPswd = $dsn[4]; $DBName = $dsn[5]; $newLink = $dsn[6] == ''?$newLink:$dsn[6]; } $this->DBHost = empty($DBHost)?$this->DBHost:$DBHost; $this->DBUser = empty($DBUser)?$this->DBUser:$DBUser; $this->DBPswd = empty($DBPswd)?$this->DBPswd:$DBPswd; $this->DBName = empty($DBName)?$this->DBName:$DBName;
if(!empty($DBHost)){ $this->connect($this->DBHost, $this->DBUser, $this->DBPswd, $newLink); } if(!empty($DBName)){ $this->selectDB($DBName); } }
function splitDSN($dsn){ //$dsn = "数据库类型名称://入口帐号:入口密码@数据库主机名:端口号/数据库名/是否总是打开新的连接"; //$dsn = "MySQL://Dummy:123@localhost:3306/tetx/false"; $dsn = preg_split("/[:\/@]/", $dsn);
$DBTpye = ''; $DBHost = ''; $DBPort = ''; $DBUser = ''; $DBPswd = ''; $DBName = ''; $DBNewLink = false;
$DBTpye = $dsn[0]; $DBHost = $dsn[5]; $DBPort = $dsn[6]; $DBUser = $dsn[3]; $DBPswd = $dsn[4]; $DBName = $dsn[7]; $DBNewLink = $dsn[8];
return array($DBTpye, $DBHost, $DBPort, $DBUser, $DBPswd, $DBName, $DBNewLink); }
function affectedRows(){ /* 取得前一次 MySQL 操作所影响的记录行数 */ return mysql_affected_rows($this->LinkId); }
function changeUser($user, $password){ /* 改变活动连接中登录的用户 */ return mysql_change_user($user, $password, $this->DBName, $this->LinkId); }
function clientEncoding(){ /* 返回字符集的名称 */ return mysql_client_encoding($this->LinkId); }
function close(){ /* 关闭 MySQL 连接 */ $close = mysql_close($this->LinkId); $this->LinkId = NULL; $this->Result = NULL; $this->Record = NULL; return $close; }
function connect($DBHost = '', $DBUser = '', $DBPswd = '', $newLink = false){//, int client_flags){ /* 打开一个到 MySQL 服务器的连接 */ $connect = @mysql_connect(empty($DBHost)?$this->DBHost:$DBHost, empty($DBUser)?$this->DBUser:$DBUser, empty($DBPswd)?$this->DBPswd:$DBPswd, $newLink); if(!is_resource($connect)){ $this->halt("连接数据库失败!", 1); return false; } $this->LinkId = $connect; return true; }
function createDB($DBName){ /* 新建一个 MySQL 数据库 */ return @mysql_create_db($DBName, $this->LinkId) or die($this->halt("创建数据库 ".$DBName." 失败!")); }
function dataSeek($rowNumber){ /* 移动内部结果的指针 */ return mysql_data_seek($this->Result, $rowNumber); }
function dbName($row, $field = NULL){ /* 取得结果数据 */ if(empty($field)){ return mysql_db_name($this->Result, $row); } return mysql_db_name($this->Result, $row, $field); }
function dbQuery($DBName, $queryString){ /* 发送一条 MySQL 查询 */ $this->Result = mysql_db_query($DBName, $queryString, $this->LinkId); return $this->Result?true:false; }
function dropDB($DBName){ /* 丢弃(删除)一个 MySQL 数据库 */ return mysql_drop_db($DBName, $this->LinkId); }
function errno(){ /* 返回上一个 MySQL 操作中的错误信息的数字编码 */ return mysql_errno($this->LinkId); }
function error(){ /* 返回上一个 MySQL 操作产生的文本错误信息 */ return mysql_error($this->LinkId); }
function escapeString($unescapedString){ /* 转义一个字符串用于 mysql_query */ return mysql_escape_string($unescapedString); }
function fetchArray($Rows = 0, $resultType = MYSQL_BOTH){ /* 从结果集中取得一行作为关联数组,或数字数组,或二者兼有 */ if(!is_resource($this->Result)){ return false; } $fetchArray = mysql_fetch_array($this->Result, $resultType); if($fetchArray && $Rows){$this->Rows++;} return $fetchArray; }
function fetchAssoc($Rows = 0){ /* 从结果集中取得一行作为关联数组 */ if(!is_resource($this->Result)){ return false; } $fetchAssoc = mysql_fetch_assoc($this->Result); if($fetchAssoc && $Rows){$this->Rows++;} return $fetchAssoc; }
function fetchField($fieldOffset = NULL){ /* 从结果集中取得列信息并作为对象返回 */ if(empty($fieldOffset)){ return mysql_fetch_field($this->Result, $fieldOffset); } return mysql_fetch_field($this->Result); }
function fetchLengths(){ /* 取得结果集中每个输出的长度 */ return mysql_fetch_lengths($this->Result); }
function fetchObject($Rows = 0){ /* 从结果集中取得一行作为对象 */ if(!is_resource($this->Result)){ return false; } $fetchObject = mysql_fetch_object($this->Result); if(is_object($fetchObject) && $Rows){$this->Rows++;} return is_object($fetchObject)?$fetchObject:false; }
function fetchRow($Rows = 0){ /* 从结果集中取得一行作为枚举数组 */ if(!is_resource($this->Result)){ return false; } $fetchRow = mysql_fetch_row($this->Result); if($fetchRow && $Rows){$this->Rows++;} return $fetchRow; }
function fieldFlags($fieldOffset){ /* 从结果中取得和指定字段关联的标志 */ return mysql_field_flags($this->Result, $fieldOffset); }
function fieldLen($fieldOffset){ /* 返回指定字段的长度 */ return mysql_field_len($this->Result, $fieldOffset); }
function fieldName($fieldIndex){ /* 取得结果中指定字段的字段名 */ return mysql_field_name($this->Result, $fieldIndex); }
function fieldSeek($fieldOffset){ /* 将结果集中的指针设定为制定的字段偏移量 */ return mysql_field_seek($this->Result, $fieldOffset); }
function fieldTable($fieldOffset){ /* 取得指定字段所在的表名 */ return mysql_field_table($this->Result, $fieldOffset); }
function fieldType($fieldOffset){ /* 取得结果集中指定字段的类型 */ return mysql_field_type($this->Result, $fieldOffset); }
function freeResult(){ /* 释放结果内存 */ return mysql_free_result($this->Result); }
function getClientInfo(){ /* 取得 MySQL 客户端信息 */ return mysql_get_client_info(); }
function getHostInfo(){ /* 取得 MySQL 主机信息 */ return mysql_get_host_info($this->LinkId); }
function getProtoInfo(){ /* 取得 MySQL 协议信息 */ return mysql_get_proto_info($this->LinkId); }
function getServerInfo(){ /* 取得 MySQL 服务器信息 */ return mysql_get_server_info($this->LinkId); }
function info(){ /* 取得最近一条查询的信息 */ return mysql_info($this->LinkId); }
function insertId(){ /* 取得上一步 INSERT 操作产生的 ID */ return mysql_insert_id($this->LinkId); }
function listDBs(){ /* 列出 MySQL 服务器中所有的数据库 */ $this->Result = mysql_list_dbs($this->LinkId); return $this->Result?true:false; }
function listFields($DBName, $tableName){ /* 列出 MySQL 结果中的字段 */ $this->Result = mysql_list_fields($DBName, $tableName, $this->LinkId); return $this->Result?true:false; }
function listProcesses(){ /* 列出 MySQL 进程 */ $this->Result = mysql_list_processes($this->LinkId); return $this->Result?true:false; }
function listTables($DBName = ''){ /* 列出 MySQL 数据库中的表 */ $DBName = empty($DBName)?$this->DBName:$DBName; $this->Result = mysql_list_tables($DBName, $this->LinkId); return $this->Result?true:false; }
function numFields(){ /* 取得结果集中字段的数目 */ return mysql_num_fields($this->Result); }
function numRows(){ /* 取得结果集中行的数目 */ return mysql_num_rows($this->Result); }
function pconnect($DBHost = '', $DBUser = '', $DBPswd = ''){ /* 打开一个到 MySQL 服务器的持久连接 */ $connect = @mysql_pconnect(empty($DBHost)?$this->DBHost:$DBHost, empty($DBUser)?$this->DBUser:$DBUser, empty($DBPswd)?$this->DBPswd:$DBPswd); if(!is_resource($connect)){ $this->halt("连接数据库失败!",1); return false; } $this->LinkId = $connect; return true; }
function ping(){ /* Ping 一个服务器连接,如果没有连接则重新连接 */ return mysql_ping($this->LinkId); }
function query($queryString){ /* 发送一条 MySQL 查询 */ if(empty($queryString)){ $this->halt("SQL 语句为空!", 1); return false; } if(!is_resource($this->LinkId)){ $this->halt("请先确保数据库已经连接上!", 1); return false; } $this->Result = mysql_query($queryString, $this->LinkId);// or die(mysql_error());//print_r($this); return $this->Result?true:false; }
function realEscapeString($unescapedString){ /* 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集 */ return mysql_real_escape_string($unescapedString, $this->LinkId); }
function result($row, $field = NULL){ /* 取得结果数据 */ if(empty($field)){ return mysql_result($this->Result, $row, $field); } return mysql_result($this->Result, $row); }
function selectDB($DBName = 'test'){ /* 选择 MySQL 数据库 */ return mysql_select_db(empty($DBName)?$this->$DBName:$DBName, $this->LinkId); }
function stat(){ /* 取得当前系统状态 */ return mysql_stat($this->LinkId); }
function tablename($index){ /* 取得表名 */ return mysql_tablename($this->Result, $index); }
function threadId(){ /* 返回当前线程的 ID */ return mysql_thread_id($this->LinkId); }
function unbufferedQuery($queryString){ /* 向 MySQL 发送一条 SQL 查询,并不获取和缓存结果的行 */ $this->Result = mysql_unbuffered_query($queryString,$this->LinkId); return $this->Result?true:false; } /*-- 上面的方法名跟手册上 MySQL 的那些函数名是一对一的,除了“splitDSN”和“构造函数” --*/ /*-- 下面是扩展,也就是说下面的这些方法在手册上是找不到影子的 --*/ function free(){ /* 释放结果内存,效果 freeResult 一样,只是这样简单些,少写几个字母,算是别名吧~ ^_^ */ return $this->freeResult(); }
function setMustBeHalt($MustBeHalt = false){ $this->MustBeHalt = $MustBeHalt; }
function getMustBeHalt(){ return $this->MustBeHalt; } /* 以下是支持事物扩展 */ function setAutoCommit($AutoCommit = 1){ /* 默认为不支持事务 */ mysql_query("SET AUTOCOMMIT = ".$AutoCommit); }
function begin(){ /* 事务开始 */ @mysql_query("LOCK TABLES"); @mysql_query("UNLOCK TABLES"); $this->setAutoCommit(0); mysql_query("BEGIN"); }
function rollback(){ /* 回滚,继续默认的不支持事务 */ mysql_query("ROLLBACK"); @mysql_query("UNLOCK TABLES"); $this->setAutoCommit(1); }
function commit(){ /* 事务结束,继续默认的不支持事务 */ mysql_query("COMMIT"); @mysql_query("UNLOCK TABLES"); $this->setAutoCommit(1); } /* 以上是支持事物扩展 */ function getRows(){ /* 取得已经读出的数据记录数 */ return $this->Rows; }
function getDBName(){ return $this->DBName; }
function nextRecord($resultType = 0){ /* 跟 phplib 接轨,同 phplib 的 next_record */ $record = NULL; switch($resultType){ case 1: $record = @mysql_fetch_assoc($this->Result); $this->RecordCase = 1; break; case 2: $record = @mysql_fetch_row($this->Result); $this->RecordCase = 2; break; case 3: $record = @mysql_fetch_object($this->Result); $this->RecordCase = 3; break; default: $record = @mysql_fetch_array($this->Result); $this->RecordCase = 0; break; } if(is_resource($record)){ $this->Record = $record; }else{ return false; } }
function f($fieldName){ /* 跟 phplib 接轨 */ switch($this->RecordCase){ case 3: return is_object($this->Record)?$this->Record->$fieldName:NULL; break; default: return $this->Record[$fieldName]; break; } } /* 下面的自己可以定义格式 */ function halt($msg = "未知错误!", $MustBeHalt = 0){ echo $msg; if($MustBeHalt !== 0 || $this->getMustBeHalt()){ die(); } } /* 下面的可要可不要,因为得PHP5才行 */ function __get($nm){ if(isset($this->$nm)){ // }else{ $this->halt("没有的成员变量 :$nm\n",1); } }
function __set($nm, $val){ // }
function __call($m, $a){ print "<hr>调用不存在的方法——".$m."(".join(",",$a).")!\n"; echo '<pre>'; var_dump($a); echo '</pre>'; $this->halt("<hr>"); }
} // End DummyMySQLClass ?> <?php /** function __autoload($className) { include_once $className . ".php"; } $DMC = new DummyMySQLClass("localhost","root","","test"); //print_r($DMC);
*/ //--------------------------------------------------------- //---------------------------------------------------------
//--------------------------------------------------------- /**4 $DMC->query("SELECT * FROM `purchase_product` LIMIT 1"); while($fetchObject = $DMC->fetchObject(3)){ echo $DMC->fieldName(0).'<br>'; // 效果如:ID echo $DMC->fieldType(0).'<br>'; echo $DMC->fieldLen(0).'<br>'; // 效果如:9 print_r($DMC->fieldFlags(0)); // 效果如:not_null primary_key auto_increment echo '<hr>合起来的效果:<br>'; echo '`'.$DMC->fieldName(0).'` '.$DMC->fieldType(0).'('.$DMC->fieldLen(0).') '.str_replace(array("NOT_NULL","PRIMARY_KEY"),array("NOT NULL","PRIMARY KEY"),strtoupper($DMC->fieldFlags(0))).",\n<br>"; } //下面这是秘籍!!^_^ $DMC->query("show create table `purchase_product`"); while($fetchObject = $DMC->fetchObject(3)){ $t = 'Create Table';print_r($fetchObject->$t); } */ //--------------------------------------------------------- /**4 echo "getHostInfo() --- ".$DMC->getHostInfo().'<br>'; echo "getClientInfo() - ".$DMC->getClientInfo().'<br>'; echo "getProtoInfo() -- ".$DMC->getProtoInfo().'<br>'; echo "getServerInfo() - ".$DMC->getServerInfo().'<br>'; echo "info() ---------- ".$DMC->info().'<br>'; */ //--------------------------------------------------------- /**3 //取得指定库的所有表 $DMC->listTables("test"); while($row = $DMC->fetchRow()){ print "Table: ".$row[0]."\n"; } //下面for的效果跟上面while的一样 for ($i = 0; $i < $DMC->numRows(); $i++){ printf ("Table: %s\n", $DMC->tablename($i)); } */ //--------------------------------------------------------- /**2 //数据查询 $DMC->query("SELECT * FROM `purchase_product` LIMIT 1"); while($fetchObject = $DMC->fetchObject(3)){ print_r($fetchObject); print_r($DMC->fetchLengths()); // 是记录的长度,不是字段的长度 //print_r($DMC); } */ //--------------------------------------------------------- /**1 // 取得指定库指定表名称的字段 $DMC->listFields("test","purchase_product"); $a = $DMC->numFields(); for($i=0; $i<$a; $i++){ echo $DMC->fieldName($i).' '; } */ ///////////////////////////////////////////////// // // // 环境:PHP5.0.2 + APACHE:2.0.52 +Win2Kp_sp4 // // // ///////////////////////////////////////////////// ?>

|