支持php4、php5的mysql数据库操作类


Posted in PHP onJanuary 10, 2008

前端一直使用PHP5,的确使用起来特别的爽,现在为了能在俺的虚拟主机上跑,不得不改成PHP4的。这几个库类我以前发在PHPCHIAN,地址是http://www.phpchina.com/bbs/viewthread.php?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);
  }
}
?>

PHP 相关文章推荐
基于mysql的bbs设计(三)
Oct 09 PHP
生成sessionid和随机密码的例子
Oct 09 PHP
使用 eAccelerator加速PHP代码的目的
Mar 16 PHP
PHP开发微信支付的代码分享
May 25 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
Nov 28 PHP
php显示时间常用方法小结
Jun 05 PHP
PHP文件上传类实例详解
Apr 08 PHP
php下载文件超时时间的设置方法
Oct 06 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
Oct 14 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
Apr 15 PHP
让PHP支持页面回退的两种方法
Jan 10 #PHP
php下使用SMTP发邮件的代码
Jan 10 #PHP
ZF等常用php框架中存在的问题
Jan 10 #PHP
逐步提升php框架的性能
Jan 10 #PHP
在PHP中使用Sockets 从Usenet中获取文件
Jan 10 #PHP
php扩展ZF――Validate扩展
Jan 10 #PHP
set_include_path在win和linux下的区别
Jan 10 #PHP
You might like
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
php实现评论回复删除功能
2017/05/23 PHP
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
H5实现仿flash效果的实现代码
2017/09/29 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
Python 字符串换行的多种方式
2018/09/06 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
python多进程读图提取特征存npy
2019/05/21 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
html5默认气泡修改的代码详解
2020/03/13 HTML / CSS
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
医科学校毕业生自荐信
2013/11/09 职场文书
大学本科毕业生的自我鉴定
2013/11/26 职场文书
银行简历自我评价
2014/02/11 职场文书
帮一个朋友写的求职信
2014/08/09 职场文书
2014年学前班工作总结
2014/12/08 职场文书
2015年财政所工作总结
2015/04/25 职场文书
公司业务员管理制度
2015/08/05 职场文书
Java移除无效括号的方法实现
2021/08/07 Java/Android
python标准库ElementTree处理xml
2022/05/20 Python