前端一直使用PHP5,的确使用起来特别的爽,现在为了能在俺的虚拟主机上跑,不得不改成PHP4的。这几个库类我以前发在PHPCHIAN,地址是?tid=5687&highlight=。(前几天在网上搜索了下,发现很多转载我的这几篇文章都没有说明出处,而且把我的版权都删除了,气晕了。) 
    昨天改写了数据库操作类,恰好在我简化zend Framework也能用到。 
    代码如下: 
<?php 
/** 
* filename: DB_Mysql.class.php 
* @package:phpbean 
* @author :feifengxlq<[email]feifengxlq@gmail.com[/email]> 
* @copyright :Copyright 2006 feifengxlq 
* @license:version 1.2 
* create:2006-5-30 
* modify:2006-10-19 by feifengxlq 
* description:the interface of mysql. 
*  
* example: 
* ////////////Select action (First mode)////////////////////////////// 
$mysql=new DB_Mysql("localhost","root","root","root");     
$rs=$mysql->query("select * from test"); 
for($i=0;$i<$mysql->num_rows($rs);$i++) 
    $record[$i]=$mysql->seek($i); 
print_r($record); 
$mysql->close(); 
* ////////////Select action (Second mode)////////////////////////////// 
 $mysql=new DB_Mysql("localhost","root","root","root"); 
 $rs=$mysql->execute("select * from test"); 
 print_r($rs); 
 $mysql->close(); 
* /////////////insert action//////////////////////////// 
   $mysql=new DB_Mysql("localhost","root","root","root");     
   $mysql->query("insert into test(username) values('test from my DB_mysql')"); 
   printf("%s",$mysql->insert_id()); 
   $mysql->close(); 
*/ 
class mysql{ 
   /* private: connection parameters */ 
   var $host="localhost"; 
   var $database=""; 
   var $user="root"; 
   var $password=""; 
   /* private: configuration parameters */ 
   var $pconnect=false; 
   var $debug=false; 
   /* private: result array and current row number */ 
   var $link_id=0; 
   var $query_id=0; 
   var $record=array(); 
   /** 
    * construct  
    * 
    * @param string $host 
    * @param string $user 
    * @param string $password 
    * @param string $database 
    */ 
   function __construct($host="localhost",$user="root",$password="",$database="") 
   { 
       $this->set("host",$host); 
       $this->set("user",$user); 
       $this->set("password",$password); 
       $this->set("database",$database); 
       $this->connect(); 
   } 
   /** 
    * set the value for the param of this class 
    * 
    * @param string $var 
    * @param string $value 
    */ 
   function set($var,$value) 
   { 
       $this->$var=$value; 
   } 
    
   /** 
    * connect to a mysql server,and choose the database. 
    * 
    * @param string $database 
    * @param string $host 
    * @param string $user 
    * @param string $password 
    * @return link_id 
    */ 
   function connect($database="",$host="",$user="",$password="") 
   { 
       if(!empty($database))$this->set("database",$database); 
       if(!empty($host))$this->set("host",$host); 
       if(!empty($user))$this->set("user",$user); 
       if(!empty($password))$this->set("password",$password); 
       if($this->link_id==0) 
       { 
           if($this->pconnect) 
              $this->link_id=@mysql_pconnect($this->host,$this->user,$this->password); 
           else  
              $this->link_id=@mysql_connect($this->host,$this->user,$this->password); 
           if(!$this->link_id) 
              die("Mysql Connect Error in ".__FUNCTION__."():".mysql_errno().":".mysql_error()); 
           if(!@mysql_select_db($this->database,$this->link_id)) 
              die("Mysql Select database Error in ".__FUNCTION__."():".mysql_errno().":".mysql_error()); 
       } 
       return $this->link_id; 
   } 
   /** 
    * query a sql into the database 
    * 
    * @param string $strsql 
    * @return query_id 
    */ 
   function query($strsql="") 
   { 
       if(empty($strsql)) die("Mysql Error:".__FUNCTION__."() strsql is empty!"); 
       if($this->link_id==0) $this->connect(); 
       if($this->debug) printf("Debug query sql:%s",$strsql); 
       $this->query_id=@mysql_query($strsql,$this->link_id); 
       if(!$this->query_id) die("Mysql query fail,Invalid sql:".$strsql."."); 
       return $this->query_id; 
   } 
   /** 
    * query a sql into the database,while it is differernt from the query() method, 
    * this method will return a record(array); 
    * 
    * @param string $strsql 
    * @param string $style 
    * @return $record is a array() 
    */ 
   function Execute($strsql,$style="array") 
   { 
       $this->query($strsql); 
       if(!empty($this->record))$this->record=array(); 
       $i=0; 
       if($style=="array"){ 
           while ($temp=@mysql_fetch_array($this->query_id)) { 
               $this->record[$i]=$temp; 
               $i++; 
           } 
       }else{ 
           while ($temp=@mysql_fetch_object($this->query_id)) { 
               $this->record[$i]=$temp; 
               $i++; 
           } 
       }             
       unset($i); 
       unset($temp); 
       return $this->record; 
   } 
   /** 
    * seek,but not equal to mysql_data_seek. this methord will return a list. 
    * 
    * @param int $pos 
    * @param string $style 
    * @return record 
    */ 
   function seek($pos=0,$style="array") 
   { 
       if(!@mysql_data_seek($this->query_id,$pos)) 
           die("Error in".__FUNCTION__."():can not seek to row ".$pos."!"); 
       $result=@($style=="array")?mysql_fetch_array($this->query_id):mysql_fetch_object($this->query_id); 
       if(!$result) die("Error in ".__FUNCTION__."():can not fetch data!"); 
       return $result; 
   } 
   /** 
    * free the result of query 
    * 
    */ 
   function free() 
   { 
       if(($this->query_id)&($this->query_id!=0))@mysql_free_result($this->query_id); 
   } 
   /** 
    * evaluate the result (size, width) 
    * 
    * @return num 
    */ 
   function affected_rows() 
   { 
       return @mysql_affected_rows($this->link_id); 
   } 
   function num_rows() 
   { 
       return @mysql_num_rows($this->query_id); 
   } 
   function num_fields() 
   { 
       return @mysql_num_fields($this->query_id); 
   } 
   function insert_id() 
   { 
       return @mysql_insert_id($this->link_id); 
   } 
   function close() 
   { 
       $this->free(); 
       if($this->link_id!=0)@mysql_close($this->link_id); 
       if(mysql_errno()!=0) die("Mysql Error:".mysql_errno().":".mysql_error()); 
   } 
   function select($strsql,$number,$offset) 
   { 
       if(empty($number)){ 
           return $this->Execute($strsql); 
       }else{ 
           return $this->Execute($strsql.' limit '.$offset.','.$number); 
       } 
   } 
   function __destruct() 
   { 
       $this->close(); 
       $this->set("user",""); 
       $this->set("host",""); 
       $this->set("password",""); 
       $this->set("database",""); 
   } 
} 
?>  
在此基础上,我顺便封装SIDU(select,insert,update,delete)四种基本操作,作为简化的zend Framework的module。代码如下(这个没写注释了,懒的写。。): 
<? 
class module{ 
  var $mysql; 
  var $tbname; 
  var $debug=false; 
  function __construct($tbname){ 
     if(!is_string($tbname))die('Module need a args of tablename'); 
   $this->tbname=$tbname; 
   $this->mysql=phpbean::registry('db'); 
  } 
  function _setDebug($debug=true){ 
     $this->debug=$debug; 
  } 
  function add($row){ 
     if(!is_array($row))die('module error:row should be an array'); 
   $strsql='insert into `'.$this->tbname.'`'; 
   $keys=''; 
   $values=''; 
   foreach($row as $key=>$value){ 
      $keys.='`'.$key.'`,'; 
    $values.='\''.$value.'\''; 
   } 
   $keys=rtrim($keys,','); 
   $values=rtrim($values,','); 
   $strsql.=' ('.$keys.') values ('.$values.')'; 
   if($this->debug)echo '<hr>'.$strsql.'<hr>'; 
   $this->mysql->query($strsql); 
   return $this->mysql->insert_id(); 
  } 
  function query($strsql){ 
     return $this->mysql->Execute($strsql); 
  } 
  function count($where=''){ 
     $strsql='select count(*) as num from `'.$this->tbname.'` '; 
   if(!empty($where))$strsql.=$where; 
   $rs=$this->mysql->Execute($strsql); 
   return $rs[0]['num']; 
  } 
  function select($where=''){ 
     $strsql='select * from `'.$this->tbname.'` '; 
   if(!empty($where))$strsql.=$where; 
   return $this->mysql->Execute($strsql); 
  } 
  function delete($where=''){ 
     if(empty($where))die('Error:the delete method need a condition!'); 
   return $this->mysql->query('delete from `'.$this->tbname.'` '.$where); 
  } 
  function update($set,$where){ 
     if(empty($where))die('Error:the update method need a condition!'); 
   if(!is_array($set))die('Error:Set must be an array!'); 
   $strsql='update `'.$this->tbname.'` '; 
   //get a string of set 
   $strsql.='set '; 
   foreach($set as $key=>$value){ 
      $strsql.='`'.$key.'`=\''.$value.'\','; 
   } 
   $strsql=rtrim($strsql,','); 
   return $this->mysql->query($strsql.' '.$where); 
  } 
  function detail($where){ 
     if(empty($where))die('Error:where should not empty!'); 
   $rs=$this->mysql->query('select * from `'.$this->tbname.'` '.$where); 
   return $this->mysql->seek(0); 
  } 
} 
?> 
您可能感兴趣的文章:
