PHP 的 MySQL 操作类,跟手册上的函数一样用,但是更方便了。多说无益,看了就知道了。

类别:编程语言 点击:0 评论:0 推荐:

<?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