Apr
15

PHPWind 的DB类     2009

 00:03    768    0   jane 程序 代码 源码 不指定 | |
PHPWind 的DB类

Class DB {


  //查询次数变量

  var $query_num = 0;

  //构造函数,建立与数据库的连接

  function DB($dbhost, $dbuser, $dbpw, $dbname, $pconnect = 0) {

  $this->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect);

  }

  //连接数据库函数

  function connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect = 0) {

  //mysql_connect -- 打开一个到 MySQL 服务器的连接

  //mysql_pconnect -- 打开一个到 MySQL 服务器的持久连接

  //mysql_pconnect() 和 mysql_connect() 非常相似,但有两个主要区别。

  //首先,当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。

  //其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close() 不会关闭由 mysql_pconnect() 建立的连接)。

  //判断是否开启持久连接设置,开启则使用持久连接,未开启则使用一般连接

  $pconnect==0 ? @mysql_connect($dbhost, $dbuser, $dbpw) : @mysql_pconnect($dbhost, $dbuser, $dbpw);

  //mysql_errno -- 返回上一个 MySQL 操作中的错误信息的数字编码

  //如果返回错误代码,则数据库挂起输出错误信息

  mysql_errno()!=0 && $this->halt("Connect($pconnect) to MySQL ($dbhost,$dbuser) failed");

  //如果数据库版本大于4.1且全局变量中字符集参数不为空

  if($this->server_info() > '4.1' && $GLOBALS['charset']){

  //mysql_query -- 发送一条 MySQL 查询

  //设置NAMES参数为相应字符集参数值,避免PHP读取mysql数据库时出现中文乱码

  mysql_query("SET NAMES '".$GLOBALS['charset']."'");

  }

  //如果数据库版本大于5.0

  if($this->server_info() > '5.0'){

  //设置sql_mode参数为空

  mysql_query("SET sql_mode=''");

  }

  //如果数据库名存在

  if($dbname) {

  //mysql_select_db -- 选择 MySQL 数据库

  //如果选择数据库未成功

  if (!@mysql_select_db($dbname)){

  //数据库挂起,输出错误信息

  $this->halt('Cannot use database '.$dbname);

  }

  }

  }

  //关闭数据库函数

  function close() {

  //mysql_close -- 关闭 MySQL 连接

  return mysql_close();

  }

  //选择数据库函数

  function select_db($dbname){

  if (!@mysql_select_db($dbname)){

  $this->halt('Cannot use database '.$dbname);

  }

  }

  //数据库信息函数

  function server_info(){

  //mysql_get_server_info -- 取得 MySQL 服务器版本信息

  return mysql_get_server_info();

  }

  //查询数据库函数

  function query($SQL,$method='') {

  //如果表区分符设置的不是pcr_则替换sql语句中的pcr_为相应的表区分符

  $GLOBALS['PW']=='pcr_' or $SQL=str_replace('pcr_',$GLOBALS['PW'],$SQL);

  //mysql_unbuffered_query -- 向 MySQL 发送一条 SQL 查询,并不获取和缓存结果的行

  //mysql_unbuffered_query() 向 MySQL 发送一条 SQL 查询 query,但不像 mysql_query() 那样自动获取并缓存结果集。一方面,这在处理很大的结果集时会节省可观的内存。另一方面,可以在获取第一行后立即对结果集进行操作,而不用等到整个 SQL 语句都执行完毕。

  //如果传入的方法参数为U_B且函数mysql_unbuffered_query存在,则

  if($method=='U_B' && function_exists('mysql_unbuffered_query')){

  $query = mysql_unbuffered_query($SQL);

  }else{

  $query = mysql_query($SQL);

  }

  //查询次数+1

  $this->query_num++;

  //echo $SQL.'

  '.$this->query_num.'

  ';

  //如果没有查询结果,则数据库挂起输出错误信息

  if (!$query) $this->halt('Query Error: ' . $SQL);

  //返回查询结果资源

  return $query;

  }

  //读取一条数据记录函数

  function get_one($SQL){

  $query=$this->query($SQL,'U_B');

  //mysql_fetch_array -- 从结果集中取得一行作为关联数组,或数字数组,或二者兼有

  //mysql_fetch_array() 中可选的第二个参数 result_type 是一个常量,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH。

  //MYSQL_ASSOC 返回的数据列使用字段名作为数组的索引名。

  //MYSQL_BOTH 返回的数据列使用字段名及数字索引作为数组的索引名。

  //MYSQL_NUM 返回的数据列使用数字索引作为数组的索引名。索引从 0 开始,表示返回结果的第一个字段。

  $rs =& mysql_fetch_array($query, MYSQL_ASSOC);

  //返回结果数组

  return $rs;

  }

  //连带更新函数

  function pcr_update($SQL_1,$SQL_2,$SQL_3){

  //取$SQL_1执行得到的数组

  $rt=$this->get_one($SQL_1);

  //若得到的数组不为空

  if($rt){

  //更新执行$SQL_2

  $this->update($SQL_2);

  } else{

  //更新执行$SQL_3

  $this->update($SQL_3);

  }

  }

  //更新数据库函数

  function update($SQL) {

  //如果表区分符设置的不是pcr_则替换sql语句中的pcr_为相应的表区分符

  $GLOBALS['PW']=='pcr_' or $SQL=str_replace('pcr_',$GLOBALS['PW'],$SQL);

  //如果开启进程优化

  if($GLOBALS['db_lp']==1){

  //如果你指定关键词 LOW_PRIORITY,执行将被延迟,直到没有其它的客户端正在读取表。

  //给更新命令加上 LOW_PRIORITY关键字

  if(substr($SQL,0,7)=='REPLACE'){

  $SQL=substr($SQL,0,7).' LOW_PRIORITY'.substr($SQL,7);

  } else{

  $SQL=substr($SQL,0,6).' LOW_PRIORITY'.substr($SQL,6);

  }

  }

  if(function_exists('mysql_unbuffered_query')){

  $query = mysql_unbuffered_query($SQL);

  }else{

  $query = mysql_query($SQL);

  }

  //查询次数+1

  $this->query_num++;

  //echo $SQL.'

  '.$this->query_num.'

  ';

  //如果没有结果,则数据库挂起输出错误信息

  if (!$query) $this->halt('Update Error: ' . $SQL);

  //返回结果资源

  return $query;

  }

  //从结果集中取得结果数组,根据参数决定数组索引

  function fetch_array($query, $result_type = MYSQL_ASSOC) {

  return mysql_fetch_array($query, $result_type);

  }

  //返回影响记录数

  function affected_rows() {

  //mysql_affected_rows -- 取得前一次 MySQL 操作所影响的记录行数

  return mysql_affected_rows();

  }

  //返回结果集行数

  function num_rows($query) {

  //mysql_num_rows -- 取得结果集中行的数目

  $rows = mysql_num_rows($query);

  return $rows;

  }

  //释放结果内存

  function free_result($query) {

  //mysql_free_result -- 释放结果内存

  //mysql_free_result() 仅需要在考虑到返回很大的结果集时会占用多少内存时调用。在脚本结束后所有关联的内存都会被自动释放。

  return mysql_free_result($query);

  }

  //取得操作产生的id

  function insert_id() {

  //mysql_insert_id -- 取得上一步 INSERT 操作产生的 ID

  $id = mysql_insert_id();

  return $id;

  }

  //数据库挂起函数,并输出相应错误信息

  function halt($msg='') {

  //包含require/db_mysql_error.php文件,如果其中有重复包含,略过

  require_once(R_P.'require/db_mysql_error.php);

  //输出数据库错误提示信息

  new DB_ERROR($msg);

  }

  }

作者:jane@淘宝网女装新款秋装连衣裙裤子外套上衣_2012时尚女装新款 Ecmall二次开发-PHP技术
地址:http://www.laohucheng.com/post/322/
版权所有©转载时必须以链接形式注明作者和原始出处及本声明!

Tags: , , 引用(0)
发表评论
昵称 [注册]
密码 游客无需密码
网址
电邮
打开HTML 打开UBB 打开表情 隐藏 记住我