奶瓶
(NP博士)
版主
  
老仙
UID 52707
精华
4
积分 5560
帖子 6232
金钱 5510 喜悦币
威望 50
人脉 0
阅读权限 100
注册 2004-11-22 来自 北大中文系
状态 离线
|
[推荐阅读] 找高手解决:mysql数据库不能写入的问题
MySQL的实现(注意这个东西支持主从结构,在SELECT的时候会自动连接从库)
<?php
/** * * @package db * @version $Id: db.mysql.mod.php,v 1.0.0 2006/11/9 23:58:36 Dr.NP Exp $ * @copyright (c) 2006 BS.Group * @author Dr.NP <[email]bssoft@263.net[/email]> * @license [url]http://opensource.org/licenses/gpl-license.php[/url] GNU Public License * */
// Abstraction layer needed. require_once($module_root . 'db/dbal.' . $phpEx);
/** * Database Handler: Mysql * @since 2006-11-9 * @package db */
class BsmDbMysql extends dbal { var $classname = 'BsmDbMysql';
/** * Set this for enable MySQL Master/Slave bin-log backup mode */ var $is_master_slave = false;
/** * For Master/Slave below: */ var $master_conn_host; var $master_conn_user; var $master_conn_dbname; var $master_db_connection_id;
var $slave_conn_host; var $slave_conn_user; var $slave_conn_dbname; var $slave_db_connection_id;
var $srv_flag;
/** * Constructor */ function BsmDbMysql($is_master_slave = false) { $this->is_master_slave = ($is_master_slave) ? true : false; return $this->dbal(); }
/** * Connect to the database */ function sql_connect($db_host, $db_port, $db_user, $db_pass, $db_name, $persistency, $is_master = false) { $this->persistency = $persistency; $db_host = $db_host . (($db_port) ? ':' . $db_port : '');
if (!$this->is_master_slave) { $this->conn_host = $db_host; $this->conn_user = $db_user; $this->conn_dbname = $db_name; }
else { $srv_flag = ($is_master) ? 'master' : 'slave';
if ($is_master) { $this->master_conn_host = $db_host; $this->master_conn_user = $db_user; $this->master_conn_dbname = $db_name; }
else { $this->slave_conn_host = $db_host; $this->slave_conn_user = $db_user; $this->slave_conn_dbname = $db_name; } }
if ($this->persistency) { $r = @mysql_pconnect($db_host, $db_user, $db_pass); }
else { $r = @mysql_connect($db_host, $db_user, $db_pass); }
if ($r && @mysql_select_db($db_name, $r)) { if (!$this->is_master_slave) { $this->db_connection_id = $r; }
else { if ($is_master) { $this->master_db_connection_id = $r; }
else { $this->slave_db_connection_id = $r; }
$this->srv_flag = $srv_flag; }
// UTF-8 here... @mysql_query("SET NAMES utf8", $r); return $r; }
return $this->sql_error(); }
/** * Return number of rows */ function sql_numrows($query_id = false) { if (!$query_id) { $query_id = $this->query_result; }
return ($query_id) ? @mysql_num_rows($query_id) : false; }
/** * Free SQL result */ function sql_freeresult($query_id = false) { if (!$query_id) { $query_id = $this->query_result; }
return ($query_id) ? @mysql_free_result($query_id) : false; }
/** * Get last inserted id after insert statement */ function sql_nextid() { return ($this->db_connect_id) ? @mysql_insert_id($this->db_connect_id) : false; }
/** * Seek to given row number * rownum is zero-based */ function sql_rowseek($rownum, $query_id = false) { if (!$query_id) { $query_id = $this->query_result; }
if ($this->query_fromcache && $this->cache_offset > 0) { $this->cache_offset = $rownum; }
return ($query_id) ? @mysql_data_seek($query_id, $rownum) : false; }
/** * Escape string used in sql query */ function sql_escape($msg) { if (!$this->db_connect_id) { return @mysql_real_escape_string($msg); }
return @mysql_real_escape_string($msg, $this->db_connect_id); }
/** * Output SQL error message */ function sql_error($info = '') { die ('<b>Database error: </b>' . @mysql_error() . (($info) ? ' - ' . $info : '')); }
/** * Query from database */ function _sql_query($query = '') { $query = trim($query);
if ($query == '') { return false; }
if ($this->is_master_slave) { if ('SELECT' == strtoupper(substr($query, 0, 6))) { // Slave selected. $this->db_connection_id = $this->slave_db_connection_id; }
else { $this->db_connection_id = $this->master_db_connection_id; } }
if (($this->query_result = @mysql_query($query, $this->db_connection_id)) === false) { $this->sql_error($query); }
if ($this->query_result) { // No cache controller now. $this->num_queries['normal'] += 1; }
else { $this->num_queries['failed'] += 1; }
return ($this->query_result) ? $this->query_result : false; }
/** * Fetch current row */ function _sql_fetchrow($query_id = false, $contain_num = false) { if (!$query_id) { $query_id = $this->query_result; }
if ($query_id) { if ($contain_num) { return @mysql_fetch_array($query_id, MYSQL_BOTH); }
else { return @mysql_fetch_assoc($query_id); } }
return false; }
/** * SQL Transaction */ function _sql_transaction($status = 'begin') { switch ($status) { case 'begin': return @mysql_query('BEGIN', $this->db_connect_id); break;
case 'commit': return @mysql_query('COMMIT', $this->db_connect_id); break;
case 'rollback': return @mysql_query('ROLLBACK', $this->db_connect_id); break; }
return true; }
/** * Close Connection */ function _sql_close() { if ($this->is_master_slave) { $this->db_connection_id = null; @mysql_close($this->master_db_connection_id); @mysql_close($this->slave_db_connection_id); return; }
else { return @mysql_close($this->db_connection_id); } } }
/** * Current class name */ $classname = 'BsmDbMysql';
?>
| 

图片包子,注册送100包子! |
|