|
支持php4、php5的mysql数据库操作类
前端一直使用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<feifengxlq@gmail.com> * @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); } } ?>
|
|