<?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 //
// //
/////////////////////////////////////////////////
?>
本文地址:http://com.8s8s.com/it/it25457.htm