MYSQL实现主从insert和query分开操作
dbConfig = $dbConfig;
$this->multi_server = empty ( $this->dbConfig['slave'] ) ? false : true;
}
/**
* 连接数据库方法
* @param type $dbConfig
*/
public function connect ($db) {
$this->dbCurrent = $db;
$linkfunction = ( TRUE == $db['persistent'] ) ? 'mysql_pconnect' : 'mysql_connect';
$this->conn = $linkfunction ( $db ['host'], $db ['username'], $db ['password']);
if (! $this->conn) {
return false;
}
$re = mysql_select_db($db['dbname'], $this->conn);
if(!$re) {
return false;
}
mysql_query ( "SET NAMES '" . $db ['charset'] . "'", $this->conn );
}
/**
* 初始化数据库连接
* @param type $master
*/
public function initConnect ($master = true) {
if ($master || !$this->multi_server) {
if($this->m_link_id){
$this->conn = $this->m_link_id;
$this->ping($master);
} else {
$this->connect ( $this->dbConfig ['master'] );
$this->m_link_id = $this->conn;
}
} else {
if($this->s_link_id){
$this->conn = $this->s_link_id;
$this->ping($master);
} else {
$rand = rand(0, count($this->dbConfig ['slave']) - 1);
$this->connect ( $this->dbConfig ['slave'][$rand] );
$this->s_link_id = $this->conn;
}
}
}
/**
* 按SQL语句获取记录结果,返回数组
*
* @param sql 执行的SQL语句
*/
public function getArray($sql)
{
if( ! $result = $this->query($sql) )return FALSE;
if( ! mysql_num_rows($result) ) return FALSE;
$rows = array();
while($rows[] = mysql_fetch_array($result,MYSQL_ASSOC)){}
mysql_free_result($result);
array_pop($rows);
return $rows;
}
/**
* 返回当前插入记录的主键ID
*/
public function newinsertid()
{
return mysql_insert_id($this->conn);
}
/**
* 格式化带limit的SQL语句
*/
public function setlimit($sql, $limit)
{
return $sql. " LIMIT {$limit}";
}
/**
* 执行一个SQL语句
*
* @param sql 需要执行的SQL语句
*/
public function exec($sql)
{
$this->arrSql[] = $sql;
$this->initConnect ( true );
return mysql_query($sql, $this->conn);
}
/**
* 执行一个SQL语句,主要用于查询
* @param type $sql
* @param type $master default:false 为true:强制读主库;为false:在有从库的的情况下优先读从库,否则读主库
*/
public function query ($sql, $master = false) {
$this->arrSql[] = $sql;
$this->initConnect ( $master );
return mysql_query($sql, $this->conn);
}
/**
* 返回影响行数
*/
public function affected_rows()
{
return mysql_affected_rows($this->conn);
}
/**
* 获取数据表结构
*
* @param tbl_name 表名称
*/
public function getTable($tbl_name)
{
return $this->getArray("DESCRIBE {$tbl_name}");
}
//防止mysql gone away
public function ping($master) {
if(!@mysql_ping($this->conn)){
@mysql_close($this->conn); //注意:一定要先执行数据库关闭,这是关键
if($master || !$this->multi_server) {
unset($this->m_link_id);
} else {
unset($this->s_link_id);
}
$this->initConnect($master);
}
}
/**
* 对特殊字符进行过滤
*
* @param value 值
*/
public function __val_escape($value) {
if(is_null($value))return 'NULL';
if(is_bool($value))return $value ? 1 : 0;
if(is_int($value))return (int)$value;
if(is_float($value))return (float)$value;
if(@get_magic_quotes_gpc())$value = stripslashes($value);
$this->conn || $this->initConnect();
return '\''.mysql_real_escape_string($value, $this->conn).'\'';
}
public function escape($value) {
if(is_null($value))return 'NULL';
if(is_bool($value))return $value ? 1 : 0;
if(is_int($value))return (int)$value;
if(is_float($value))return (float)$value;
if(@get_magic_quotes_gpc())$value = stripslashes($value);
$this->conn || $this->initConnect();
return mysql_real_escape_string($value, $this->conn);
}
/**
* 析构函数
*/
public function __destruct()
{
if( TRUE != @$this->dbCurrent['persistent'] )@mysql_close($this->conn);
}
}重点在 initConnect($master)方法里,这里决定加载的配置文件中是连接到主库还是从库

创新互联公司网站建设服务商,为中小企业提供网站设计、成都网站制作服务,网站设计,网站托管、服务器租用等一站式综合服务型公司,专业打造企业形象网站,让您在众多竞争对手中脱颖而出创新互联公司。
本文名称:MYSQL实现主从insert和query分开操作
新闻来源:http://www.jxjierui.cn/article/jpogod.html


咨询
建站咨询
