[转] 转一个SQL Ralay数据库连接池的PHP操作类

xiaoxiao2021-03-01  23

转一个由于 秋衫客的一亩三分地上看的一个由秋衫客写的SQL Ralay数据库连接池的PHP操作类,给那些想利用SQL Ralay 做连接池的同志们。(好像只支持Sybase,不过应该很简单的就能够支持Mysql、Oracle等)关于SQL Relay的介绍看这里:http://blog.csdn.net/heiyeshuwu/archive/2006/05/17/743303.aspx

原文链接:http://tobylee.cnblogs.com/archive/2006/02/15/330999.html数据库类下载:http://www.cnblogs.com/Files/tobylee/sqlr.rar

原文说明:目前此类只支持Sybase,稍加扩展就可以同时支持其它多种数据库,功能还不完善,但是基本上够用,另外,还没有写说明文档,先放上来,有需要的朋友可以拿去看看,需要SQL Relay支持哦。【操作类代码】

// pdbconn.inc.php

<?php /** * 全局常量定义 * */ define("SYBASE", 0); define("ORACLE", 1); define("SUCCESS", 1); define("FAILED", -1); define("DEBUG", 1); /** * 数据库连接类 * 开始于:2006年1月10日 * 作者:秋衫客 (cntoby@gmail.com) * * 功能描述:数据库查询及连接池维护 * 暂时不支持ORACLE */ class dbconn { var $_conn;// 当前连接ID var $_cur;// var $_dbhost = "localhost";// 数据库服务器名 var $_dbport = 9000;// 数据库端口号 var $_dbuser = "dev";// 登录数据库的用户名 var $_dbpass = "dev";// 登录数据库的密码 var $_dbsock = "null"; // 数据库连接的Unix套接字 var $_dbflag = SYBASE;// 数据库类型 var $_dbflagS = "sybase";// SQLRelay中数据库类型标志 var $_dbrtrt = 0;// 连接失败后间接多长时间重试 var $_dbtries = 1;// 重试次数 var $_debug = false;// 是否为DEBUG模式 var $_cursql = "";// 当前存在的SQL文 var $_lastrt = true;// 最后一次执行的结果,成功与否boolean var $_queryrs = null;// 查询过程中的结果 var $rs = null;// 最后一次执行结果 var $recordcount = 0;// 当次返回记录总数 var $absolute = 0;// 当前页码 var $pagesize = 0;// 每页显示记录数 var $pagecount = 1;// 本次查询总页数 var $total = 0;// 总记录数 /** * 构造函数,在本函数内初始化连接及连接池 * 构造函数的参数说明: *不用任何参数可使用默认参数连接数据库 *当使用参数时,可以使用1到5个参数,顺序为 *dbhost数据库服务器名 *dbuser登录数据库用户名 *dbpass登录数据库密码 *dbsock数据库连接的Unix套接字 *dbport数据库端口号 *dbflag数据库类型,可选类型为SYBASE或ORACLE * * @return dbconn */ function dbconn() { $argc = func_num_args(); $argv = func_get_args(); $this->_dbhost = (!empty($argv[0]))?$argv[0]:$this->_dbhost; $this->_dbuser = (!empty($argv[1]))?$argv[1]:$this->_dbuser; $this->_dbpass = (!empty($argv[2]))?$argv[2]:$this->_dbpass; $this->_dbsock = (!empty($argv[3]))?$argv[3]:$this->_dbsock; $this->_dbport = (!empty($argv[4]))?$argv[4]:$this->_dbport; $this->_dbflag = (!empty($argv[5]))?$argv[5]:$this->_dbflag; $this->_dbrtrt = (!empty($argv[6]))?$argv[6]:$this->_dbrtrt; $this->_dbtries = (!empty($argv[7]))?$argv[7]:$this->_dbtries; $this->_debug = defined("DEBUG"); switch ($this->_dbflag) { case SYBASE: $this->_conn = @sqlrcon_alloc($this->_dbhost, $this->_dbport, $this->_dbsock, $this->_dbuser, $this->_dbpass, $this->_dbrtrt, $this->_dbtries); $this->_cur = @sqlrcur_alloc($this->_conn); if(@sqlrcon_identify($this->_conn)!="sybase"||@sqlrcon_ping($this->_conn)!=1) { return FAILED; } break; case ORACLE: $this->_conn = @sqlrcon_alloc($this->_dbhost, $this->_dbport, $this->_dbsock, $this->_dbuser, $this->_dbpass, $this->_dbrtrt, $this->_dbtries); $this->_cur = @sqlrcur_alloc($this->_conn); if(substring(@sqlrcon_identify($this->_conn), 0, 6)!="oracle"||@sqlrcon_ping($this->_conn)!=1) { return FAILED; } break; default: return FAILED; break; } } /** * 设置用于查询的SQL文 * * @param string $sql */ function setsql($sql = "") { $this->_cursql = $sql; return SUCCESS; } /** * 重置到初始状态 * * @return bool */ function rset() { $this->rs = null; $this->pagecount = 1; $this->recordcount = 0; $this->_queryrs = null; $this->_lastrt = true; return SUCCESS; } /** * 执行查询,返回查询是否成功,参数可以为一条SQL文,或者一个SQL文数组 * * @param string $sql * @return bool */ function doexec($sql = "") { $tran = false; $isa = false; $this->rset(); if(""==$sql||empty($sql)) { $sql = $this->_cursql; } if(!is_array($sql)) { if(!eregi("^select", trim($sql))) { $tran = true; } }else { $isa = true; for($i = 0; $i < count($sql); $i++) { if (!eregi("^select", trim($sql[$i]))) { $tran = true; break; } } } if ($tran) { $tmp = @sqlrcur_sendQuery($this->_cur, "Begin Transaction"); if($tmp!=1) { $this->_lastrt = false; return FAILED; } } if(!$isa) { $tmp = @sqlrcur_sendQuery($this->_cur, $sql); }else { for ($i = 0; $i < count($sql); $i++) { $tmp = @sqlrcur_sendQuery($this->_cur, $sql[$i]); if($tmp!=1) break; } } $this->setsql(); if($tmp==1) { if($tran) @sqlrcur_sendQuery($this->_cur, "Commit Transaction"); $this->_lastrt = true; }else { if($tran) @sqlrcur_sendQuery($this->_cur, "Rollback Transaction"); $this->_lastrt = false; return FAILED; } return SUCCESS; } /** * 记录查询,只返回一条记录 * * @return bool */ function doquery_row() { $this->rset(); if((""==trim($this->_cursql))||empty($this->_cursql)) { return false; } if(SYBASE==$this->_dbflag) { @sqlrcur_sendQuery($this->_cur, "set rowcount 1"); $tmp = @sqlrcur_sendQuery($this->_cur, $this->_cursql); if($tmp==1) { $this->recordcount = @sqlrcur_rowCount($this->_cur); $this->total = $this->recordcount; if ($this->recordcount>0) { $this->rs = @sqlrcur_getRow($this->_cur, 0); } }else { $this->recordcount = -1; $this->total = $this->recordcount; @sqlrcur_sendQuery($this->_cur, "set rowcount 0"); return FAILED; } @sqlrcur_sendQuery($this->_cur, "set rowcount 0"); }elseif(ORACLE==$this->_dbflag) { // 暂时不支持ORACLE $sfmt = @ociparse($this->_conn, $this->_cursql); $ret = @ociexecute($sfmt, OCI_DEFAULT); if($ret) { $this->recordcount = @oci_num_rows($sfmt); $this->total = $this->recordcount; if($this->recordcount>0) { @ocifetchinto($sfmt, &$this->rs); } }else { $this->recordcount = -1; $this->total = $this->recordcount; return FAILED; } } $this->setsql(); return SUCCESS; } /** * 记录查询,返回多条记录,可通过设置$rowcount来控制返回记录的最大数 * * @param int $rowcount * @return bool */ function doquery_rows($rowcount = 0) { if(!eregi("[0-9]+", $rowcount)) { $rowcount = 0; } $this->rset(); if((""==trim($this->_cursql))||empty($this->_cursql)) { return FAILED; } if(SYBASE==$this->_dbflag) { @sqlrcur_sendQuery($this->_cur, "set rowcount " .strval($rowcount)); $tmp = @sqlrcur_sendQuery($this->_cur, $this->_cursql); if($tmp==1) { $this->recordcount = @sqlrcur_rowCount($this->_cur); $this->total = $this->recordcount; if($this->recordcount > 0) { if(0>=$this->pagesize||null==$this->pagesize) { $this->pagecount = 1; $startidx = 0; $endidx = $this->recordcount - 1; }else { if($this->absolute<1) $this->absolute=1; $this->pagecount = ceil($this->recordcount/$this->pagesize); if($this->absolute>$this->pagecount) $this->absolute = $this->pagecount; $startidx = $this->pagesize * ($this->absolute-1); $endidx = $this->pagesize * $this->absolute -1; } $rcidx = 0; // 以下保存结果到$this->rc for($i = $startidx; $i <= $endidx&&$i<$this->total; $i++) { if($rowcount!=0&&$rowcount==$i) break; $this->rs[$rcidx++] = @sqlrcur_getRow($this->_cur, $i); } $this->recordcount = $rcidx; } }else { $this->recordcount = -1; $this->total = $this->recordcount; @sqlrcur_sendQuery($this->_cur, "set rowcount 0"); return FAILED; } @sqlrcur_sendQuery($this->_cur, "set rowcount 0"); }elseif(ORACLE==$this->_dbflag) { // 暂时不支持ORACLE // Oracle 处理部分 $sfmt = @ociparse($this->_conn, $this->_cursql); $ret = @ociexecute($sfmt, OCI_DEFAULT); if($ret) { $this->recordcount = @oci_num_rows($sfmt); $this->total = $this->recordcount; if($this->recordcount > 0) { if($this->pagesize<=0||null==$this->pagesize) { $this->pagecount = 1; $startidx = 0; $endidx = $this->recordcount - 1; }else { if($this->absolute < 1) $this->absolute = 1; $this->pagecount = ceil($this->recordcount/$this->pagesize); if($this->absolute>$this->pagecount) $this->absolute = $this->pagecount; $startidx = $this->pagesize * ($this->absolute - 1); $endidx = $this->pagesize * $this->absolute - 1; // aaaaaaaaaaaaaa } } }else { $this->recordcount = -1; $this->total = $this->recordcount; return FAILED; } return FAILED; } $this->setsql(); return SUCCESS; } /** * 关闭数据连接 * * @return bool */ function dbclose() { @sqlrcon_free($this->_conn); @sqlrcur_free($this->_cur); } /** * 设置或获取每页显示的记录数 * * @param int $pagesize * @return int */ function pagesize($pagesize = 0) { if(eregi("[1-9]+", $pagesize)&&$pagesize!=0) { $this->pagesize = intval($pagesize); return $this->pagesize; }else { return $this->pagesize; } } /** * 设置或获取当前要显示的页次 * * @param int $absolute * @return int */ function absolute($absolute = 1) { if(eregi(

转载请注明原文地址: https://www.6miu.com/read-3450243.html

最新回复(0)