支持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<[email][email protected][/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);

  }

  }

  ?>