喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

$5.95 Web Hosting     

上一主题 下一主题
     
标题: [原创] 刚写的SQLRELAY的类(连接池)  
 
font
论坛元老
Rank: 8Rank: 8
初级会员


UID 43400
精华 0
积分 36361
帖子 260
金钱 36361 喜悦币
威望 0
人脉 0
阅读权限 90
注册 2004-11-1
状态 离线
[广告]: 代充Paypal帐号美元
刚写的SQLRELAY的类(连接池)

在PHP下使用C的连接池(SQLRELAY),扩展了PHPBB3的DB类.让他支持SQLRELAY.
我在FEDORA CORA6下测试通过.
<?php

//封装sqlrelay
//author:小陶风



if (!defined('SQL_LAYER'))
{

        define('SQL_LAYER', 'sqlrelay');
        include(ROOT_PATH . 'model/classes/db/dbal' . $phpEx);


        class dbal_sqlrelay extends dbal
        {

                /*
                * sql_connection连接方式
                *
                *
                */

                var $rownum = 0;
                var $cursor;
                var $con = '';
               
                function sql_connect($sqlserver, $sqluser, $sqlpassword, $database, $port = false, $persistency = false)
                {

                        global $sqlrelay_socket,$sqlrelay_retrytime,$sqlrelay_tries;

                        $this->persistency = $persistency;//是否是持久连接
                        $this->user = $sqluser;//用户名
                        $this->server = $sqlserver;//用户地址
                        $this->dbname = $database;//数据库名

                        //sqlrcon_alloc(string server, int port, string socket, string user, string password, int retrytime重试时间, int tries重试次数)

                        $this->db_connect_id = sqlrcon_alloc($this->server,$port,$sqlrelay_socket,$this->user,$sqlpassword,$sqlrelay_retrytime,$sqlrelay_tries);

                        return $this->_sql_error('');

                }// end sql_connect

                //事务,要他干啥
                function sql_transaction($status = 'begin')
                {
                        //
                }//end sql_transaction


                //数据库查询
                function sql_query($query = '', $cache_ttl = 0)//$cache_ttl是否使用cache,默认是不使用
                {
                        global $sqlrelay_socket,$sqlrelay_retrytime,$sqlrelay_tries;

                        if ($query != '')
                        {
                                //echo $query;
                                global $cache;

                                if (defined('DEBUG_EXTRA'))//如果是DEBUG,则显示REPORT
                                {
                                        $this->sql_report('start', $query);
                                }

                                //$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;//cache loading...所有的cache全部封装在这里

                                //if (!$this->query_result)
                                if (1)
                                {
                                        //如果cache查询结果不存在
                                        $this->num_queries++;//统计查询次数
                                       
                                        $this->cursor = sqlrcur_alloc($this->db_connect_id);

                                        //sqlrcur_setResultSetBufferSize($this->cursor,100);//设置sqlrelay的缓存

                                        if (($this->query_result = sqlrcur_sendQuery($this->cursor,$query)) === false)
                                        {
                                                $this->sql_error($query);//自己定义错误
                                                //sqlrcur_errorMessage($this->db_connection_id);//也可以使用这个,sqlrelay自己的出错信息
                                        }

                                       
                                }
                                else if (defined('DEBUG_EXTRA'))
                                {
                                        $this->sql_report('fromcache', $query);
                                }


                        }
                        else
                        {
                                return false;
                        }

                        return ($this->query_result) ? $this->query_result : false;

                }//end sql_query


                //这个要它干啥
                function sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0)
                {
                        if ($query != '')
                        {
                                $this->query_result = false;

                                // if $total is set to 0 we do not want to limit the number of rows
                                if ($total == 0)
                                {
                                        $total = -1;
                                }

                                $query .= "\n LIMIT " . ((!empty($offset)) ? $offset . ', ' . $total : $total);

                                return $this->sql_query($query, $cache_ttl);
                        }
                        else
                        {
                                return false;
                        }
                }

                //返回结果集中的数目
                function sql_numrows($query_id = false)
                {
                        if (!$query_id)
                        {
                                $query_id = $this->query_result;
                        }

                        return ($query_id) ? @sqlrcur_rowCount($query_id) : false;
                }


                //返回影响行数
                function sql_affectedrows()
                {
                        return ($this->db_connect_id) ? sqlrcur_affectedRows($this->db_connect_id) : false;
                }


                //获取当前行
                function sql_fetchrow($query_id = false)
                {
                        global $cache;


                        if (!$query_id)
                        {
                                $query_id = $this->cursor;
                        }

/*
                        if (isset($cache->sql_rowset[$query_id]))
                        {
                                return $cache->sql_fetchrow($query_id);
                        }
*/
                       
                        $arr = sqlrcur_getRowAssoc($this->cursor,$this->rownum);
               
                        $this->rownum++;

                        return ($query_id) ?  $arr : false;
                }

                //返回指定单元的内容
                function sql_fetchfield($field, $rownum = false, $query_id = false)
                {
                        //要它干啥
                }


                function sql_nextid()//获取NEXTID
                {
                        return ($this->db_connect_id) ? sqlrcur_getResultSetId($this->cursor) : false;
                }


                function sql_freeresult()
                {
                        sqlrcur_free($this->cursor);
                }

                function _sql_close()
                {
                        return sqlrcon_free($this->db_connect_id);
                }
                function _sql_error()
                {
                        return array(
                                'message'        => @mysql_error(),
                                'code'                => @mysql_errno()
                        );
                }

                /**
                *
                */
                function _sql_report($mode, $query = '')
                {
                        switch ($mode)
                        {
                                case 'start':

                                        $explain_query = $query;
                                        if (preg_match('/UPDATE ([a-z0-9_]+).*?WHERE(.*)/s', $query, $m))
                                        {
                                                $explain_query = 'SELECT * FROM ' . $m[1] . ' WHERE ' . $m[2];
                                        }
                                        else if (preg_match('/DELETE FROM ([a-z0-9_]+).*?WHERE(.*)/s', $query, $m))
                                        {
                                                $explain_query = 'SELECT * FROM ' . $m[1] . ' WHERE ' . $m[2];
                                        }

                                        if (preg_match('/^SELECT/', $explain_query))
                                        {
                                                $html_table = false;

                                                if ($result = @mysql_query("EXPLAIN $explain_query", $this->db_connect_id))
                                                {
                                                        while ($row = @mysql_fetch_assoc($result))
                                                        {
                                                                $html_table = $this->sql_report('add_select_row', $query, $html_table, $row);
                                                        }
                                                }
                                                @mysql_free_result($result);

                                                if ($html_table)
                                                {
                                                        $this->html_hold .= '</table>';
                                                }
                                        }

                                break;

                                case 'fromcache':
                                        $endtime = explode(' ', microtime());
                                        $endtime = $endtime[0] + $endtime[1];

                                        $result = @mysql_query($query, $this->db_connect_id);
                                        while ($void = @mysql_fetch_assoc($result))
                                        {
                                                // Take the time spent on parsing rows into account
                                        }
                                        @mysql_free_result($result);

                                        $splittime = explode(' ', microtime());
                                        $splittime = $splittime[0] + $splittime[1];

                                        $this->sql_report('record_fromcache', $query, $endtime, $splittime);

                                break;
                        }
                }


        }//end class

}


?>




我木有积分我木有 金钱我木有喜悦币我木有威望我木有人脉我木有头衔
2006-10-30 06:57 PM#1
查看资料  访问主页  Blog  发短消息  顶部
 
font
论坛元老
Rank: 8Rank: 8
初级会员


UID 43400
精华 0
积分 36361
帖子 260
金钱 36361 喜悦币
威望 0
人脉 0
阅读权限 90
注册 2004-11-1
状态 离线
[广告]: 代充Paypal帐号美元
使用方法
$db = new $sql_db;

// Connect to DB

$db->sql_connect($global_db_host, $global_db_user, $global_db_pass, $global_db_name, $global_db_port, false);
unset($global_db_pass);
$db->sql_query("SET NAMES 'UTF8'");
$command = $db->sql_query("select * from test");

$arr = $db->sql_fetchrowset($command);

print_r($arr);
exit;
$db->sql_freeresult();
$db->sql_close();




我木有积分我木有 金钱我木有喜悦币我木有威望我木有人脉我木有头衔
2006-10-30 06:58 PM#2
查看资料  访问主页  Blog  发短消息  顶部
 
奶瓶 (NP博士)
版主
Rank: 7Rank: 7Rank: 7
老仙


UID 52707
精华 4
积分 5558
帖子 6228
金钱 5508 喜悦币
威望 50
人脉 0
阅读权限 100
注册 2004-11-22
来自 北大中文系
状态 离线
[推荐阅读] Illegal mix of collations (latin1_swedish_ci,IMPLICIT)
支持新兵卫一下




图片包子,注册送100包子!
2006-10-30 07:06 PM#3
查看资料  访问主页  Blog  发短消息  QQ  ICQ 状态  Yahoo!  顶部
 
sanshi0815 (sanshi0815)
高级会员
Rank: 4
中级会员



UID 63534
精华 1
积分 559
帖子 693
金钱 549 喜悦币
威望 10
人脉 0
阅读权限 50
注册 2005-3-18
状态 离线
[推荐阅读] php可以連接mssql數据庫嗎, 應怎樣配置, 謝
为啥支持啊
2006-10-31 09:21 AM#4
查看资料  Blog  发短消息  QQ  顶部
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4855
帖子 1727
金钱 4845 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[推荐阅读] 问个正则的问题
支持,不错



在场外支持奥运.....
2006-11-5 01:04 PM#5
查看资料  访问主页  发短消息  QQ  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 公司需要JAVA做的一个简单记数器
收下有时间慢慢看



五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-11-6 06:16 AM#6
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
alasika (alasika)
注册会员
Rank: 2
初级会员



UID 66240
精华 0
积分 57
帖子 48
金钱 57 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-8-27
状态 离线
[推荐阅读] 找钱网招聘php开发(www.seekfortune.com.cn)
楼主对sqlrelay的使用效果有什么感觉??
2006-11-26 07:25 PM#7
查看资料  发短消息  顶部
 
kenus
新手上路
Rank: 1



UID 73796
精华 0
积分 5
帖子 6
金钱 5 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-5-22
状态 离线
[推荐阅读] 写的一个学习交流的小东东,大家来泼水哈,呵呵
支持一下.........
2006-12-2 06:28 PM#8
查看资料  发短消息  顶部
 
phphp
版主
Rank: 7Rank: 7Rank: 7
加班一族


UID 65188
精华 1
积分 183
帖子 3006
金钱 172 喜悦币
威望 10
人脉 1
阅读权限 100
注册 2005-7-20
来自 北京市海淀区
状态 离线
[推荐阅读] php调用java如何实现?
怎么看着这么眼熟...



书到用时方恨少, 事非经过不知难
2006-12-5 06:57 AM#9
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
font
论坛元老
Rank: 8Rank: 8
初级会员


UID 43400
精华 0
积分 36361
帖子 260
金钱 36361 喜悦币
威望 0
人脉 0
阅读权限 90
注册 2004-11-1
状态 离线
[推荐阅读] 上海幼教网招聘php程序员。
小奶瓶有啥意见.



我木有积分我木有 金钱我木有喜悦币我木有威望我木有人脉我木有头衔
2006-12-5 04:18 PM#10
查看资料  访问主页  Blog  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.030423 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP