支持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 相关文章推荐
PHP聊天室技术
Oct 09 PHP
php xml文件操作实现代码(二)
Mar 20 PHP
初学CAKEPHP 基础教程
Nov 02 PHP
php数组函数序列之array_keys() - 获取数组键名
Oct 30 PHP
PHP中3种生成XML文件方法的速度效率比较
Oct 06 PHP
php仿QQ验证码的实例分析
Jul 01 PHP
PHP防止表单重复提交的几种常用方法汇总
Aug 19 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
WordPress中查询文章的循环Loop结构及用法分析
Dec 17 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
thinkphp 验证码 的使用小结
May 07 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
May 13 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
PHP file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
PHP基于cookie实现统计在线人数功能示例
2019/01/16 PHP
表单JS弹出填写提示效果代码
2011/04/16 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
node.js中的fs.appendFileSync方法使用说明
2014/12/17 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
详解在Vue中有条件地使用CSS类
2017/09/30 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
javascript代码实现简易计算器
2021/01/25 Javascript
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
python实现排序算法
2014/02/14 Python
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
如何解决python多种版本冲突问题
2020/10/13 Python
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
SQL语言面试题
2013/08/27 面试题
医科学校毕业生自荐信
2013/11/09 职场文书
孝老爱亲模范事迹
2014/01/24 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
投标承诺书范本
2014/03/27 职场文书
实习单位鉴定评语
2014/04/26 职场文书
求职信格式范文
2015/03/19 职场文书
导游词之无锡东林书院
2019/12/11 职场文书