昨天改写了数据库操作类,恰好在我简化zendFramework也能用到。
代码如下:
/**
*filename:DB_Mysql.class.php
*@package:phpbean
*@author:feifengxlq<[email]feifengxlq@gmail.com[/email]>
*@copyright:Copyright2006feifengxlq
*@license:version1.2
*create:2006-5-30
*modify:2006-10-19byfeifengxlq
*description:theinterfaceofmysql.
*
*example:
*////////////Selectaction(Firstmode)//////////////////////////////
$mysql=newDB_Mysql("localhost","root","root","root");
$rs=$mysql->query("select*fromtest");
for($i=0;$i<$mysql->num_rows($rs);$i++)
$record[$i]=$mysql->seek($i);
print_r($record);
$mysql->close();
*////////////Selectaction(Secondmode)//////////////////////////////
$mysql=newDB_Mysql("localhost","root","root","root");
$rs=$mysql->execute("select*fromtest");
print_r($rs);
$mysql->close();
*/////////////insertaction////////////////////////////
$mysql=newDB_Mysql("localhost","root","root","root");
$mysql->query("insertintotest(username)values('testfrommyDB_mysql')");
printf("%s",$mysql->insert_id());
$mysql->close();
*/
classmysql{
/*private:connectionparameters*/
var$host="localhost";
var$database="";
var$user="root";
var$password="";
/*private:configurationparameters*/
var$pconnect=false;
var$debug=false;
/*private:resultarrayandcurrentrownumber*/
var$link_id=0;
var$query_id=0;
var$record=array();
/**
*construct
*
*@paramstring$host
*@paramstring$user
*@paramstring$password
*@paramstring$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();
}
/**
*setthevaluefortheparamofthisclass
*
*@paramstring$var
*@paramstring$value
*/
functionset($var,$value)
{
$this->$var=$value;
}
/**
*connecttoamysqlserver,andchoosethedatabase.
*
*@paramstring$database
*@paramstring$host
*@paramstring$user
*@paramstring$password
*@returnlink_id
*/
functionconnect($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("MysqlConnectErrorin".__FUNCTION__."():".mysql_errno().":".mysql_error());
if(!@mysql_select_db($this->database,$this->link_id))
die("MysqlSelectdatabaseErrorin".__FUNCTION__."():".mysql_errno().":".mysql_error());
}
return$this->link_id;
}
/**
*queryasqlintothedatabase
*
*@paramstring$strsql
*@returnquery_id
*/
functionquery($strsql="")
{
if(empty($strsql))die("MysqlError:".__FUNCTION__."()strsqlisempty!");
if($this->link_id==0)$this->connect();
if($this->debug)printf("Debugquerysql:%s",$strsql);
$this->query_id=@mysql_query($strsql,$this->link_id);
if(!$this->query_id)die("Mysqlqueryfail,Invalidsql:".$strsql.".");
return$this->query_id;
}
/**
*queryasqlintothedatabase,whileitisdiffererntfromthequery()method,
*thismethodwillreturnarecord(array);
*
*@paramstring$strsql
*@paramstring$style
*@return$recordisaarray()
*/
functionExecute($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,butnotequaltomysql_data_seek.thismethordwillreturnalist.
*
*@paramint$pos
*@paramstring$style
*@returnrecord
*/
functionseek($pos=0,$style="array")
{
if(!@mysql_data_seek($this->query_id,$pos))
die("Errorin".__FUNCTION__."():cannotseektorow".$pos."!");
$result=@($style=="array")?mysql_fetch_array($this->query_id):mysql_fetch_object($this->query_id);
if(!$result)die("Errorin".__FUNCTION__."():cannotfetchdata!");
return$result;
}
/**
*freetheresultofquery
*
*/
functionfree()
{
if(($this->query_id)&($this->query_id!=0))@mysql_free_result($this->query_id);
}
/**
*evaluatetheresult(size,width)
*
*@returnnum
*/
functionaffected_rows()
{
return@mysql_affected_rows($this->link_id);
}
functionnum_rows()
{
return@mysql_num_rows($this->query_id);
}
functionnum_fields()
{
return@mysql_num_fields($this->query_id);
}
functioninsert_id()
{
return@mysql_insert_id($this->link_id);
}
functionclose()
{
$this->free();
if($this->link_id!=0)@mysql_close($this->link_id);
if(mysql_errno()!=0)die("MysqlError:".mysql_errno().":".mysql_error());
}
functionselect($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)四种基本操作,作为简化的zendFramework的module。代码如下(这个没写注释了,懒的写。。):
classmodule{
var$mysql;
var$tbname;
var$debug=false;
function__construct($tbname){
if(!is_string($tbname))die('Moduleneedaargsoftablename');
$this->tbname=$tbname;
$this->mysql=phpbean::registry('db');
}
function_setDebug($debug=true){
$this->debug=$debug;
}
functionadd($row){
if(!is_array($row))die('moduleerror:rowshouldbeanarray');
$strsql='insertinto`'.$this->tbname.'`';
$keys='';
$values='';
foreach($rowas$key=>$value){
$keys.='`'.$key.'`,';
$values.='''.$value.''';
}
$keys=rtrim($keys,',');
$values=rtrim($values,',');
$strsql.='('.$keys.')values('.$values.')';
if($this->debug)echo'
'.$strsql.'
';
$this->mysql->query($strsql);
return$this->mysql->insert_id();
}
functionquery($strsql){
return$this->mysql->Execute($strsql);
}
functioncount($where=''){
$strsql='selectcount(*)asnumfrom`'.$this->tbname.'`';
if(!empty($where))$strsql.=$where;
$rs=$this->mysql->Execute($strsql);
return$rs[0]['num'];
}
functionselect($where=''){
$strsql='select*from`'.$this->tbname.'`';
if(!empty($where))$strsql.=$where;
return$this->mysql->Execute($strsql);
}
functiondelete($where=''){
if(empty($where))die('Error:thedeletemethodneedacondition!');
return$this->mysql->query('deletefrom`'.$this->tbname.'`'.$where);
}
functionupdate($set,$where){
if(empty($where))die('Error:theupdatemethodneedacondition!');
if(!is_array($set))die('Error:Setmustbeanarray!');
$strsql='update`'.$this->tbname.'`';
//getastringofset
$strsql.='set';
foreach($setas$key=>$value){
$strsql.='`'.$key.'`=''.$value.'',';
}
$strsql=rtrim($strsql,',');
return$this->mysql->query($strsql.''.$where);
}
functiondetail($where){
if(empty($where))die('Error:whereshouldnotempty!');
$rs=$this->mysql->query('select*from`'.$this->tbname.'`'.$where);
return$this->mysql->seek(0);
}
}
?>