Este código é modificado a partir do código uchome e é processado para resolver a eficiência do uchome.
O método de encapsulamento é relativamente simples, adicionar uma extensão de interface para conexão de banco de dados somente leitura e não usar um banco de dados somente leitura não afeta o uso do código original.
Resta ser continuamente melhorado no futuro. .
Por conveniência, tente configurar um projeto do Google:
http://code.google.com/p/mysql-rw-php/Espero
ajudar amigos necessitados.
Os principais recursosda separação leitura-gravação do Mysql implementada pelo PHP
:
separação simples leitura-gravação de um banco de dados principal, você pode adicionar mais bancos de dados somente leitura, mas não se preocupe com alguns recursos não suportados. ao mesmo tempo, o inglês é ruim e escreva algumas palavras
no código php para divisão de leitura/gravação do mysql
recurso:
simplesmente rw dividido
um mestre, pode adicionar mais escravos
suporta todos os recursos do mysql
link para o mestre e escravo ao mesmo tempo
Código PHP:
mysql_rw_php.class.php
<?php
/******************************************
*** mysql-rw-php versão 0.1 @ 16/04/2009
*** código de hqlulu#gmail.com
*** http://www.aslibra.com
*** http://code.google.com/p/mysql-rw-php/
*** modificação de código de class_mysql.php (uchome)
******************************************/
classe mysql_rw_php {
//Consulte o número
var $númconsulta = 0;
//Conexão com banco de dados para operação atual
var $link = null;
//Conjunto de caracteres
var $charset;
//Banco de dados atual
var $cur_db = ";
//Se existe uma conexão de banco de dados somente leitura válida
var $ro_exist = falso;
//conexão de banco de dados somente leitura
var $link_ro = nulo;
//Lê e grava a conexão do banco de dados
var $link_rw = null;
função mysql_rw_php(){
}
função conectar($dbhost, $dbuser, $dbpw, $dbname = ”, $pconnect = 0, $halt = TRUE) {
if($pconectar) {
if(!$this->link = @mysql_pconnect($dbhost, $dbuser, $dbpw)) {
$halt && $this->halt('Não é possível conectar ao servidor MySQL');
}
} outro {
if(!$this->link = @mysql_connect($dbhost, $dbuser, $dbpw)) {
$halt && $this->halt('Não é possível conectar ao servidor MySQL');
}
}
//Falha na conexão somente leitura
if(!$this->link && !$halt) retorna falso;
//Quando rw não é inicializado, a primeira conexão é usada como rw
if($this->link_rw == null)
$this->link_rw = $this->link;
if($this->version() > '4.1′) {
if($este->charset) {
@mysql_query("SET character_set_connection=$this->charset, character_set_results=$this->charset, character_set_client=binary", $this->link);
}
if($this->version() > '5.0.1′) {
@mysql_query(”SET sql_mode=””, $this->link);
}
}
if($nome do banco de dados) {
$this->select_db($dbname);
}
}
//http://www.knowsky.com/php.asp Conecte-se a um banco de dados mysql somente leitura
função connect_ro($dbhost, $dbuser, $dbpw, $dbname = ”, $pconnect = 0){
if($this->link_rw == null)
$this->link_rw = $this->link;
$este->link = null;
//Não gera erro de parada
$this->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, false);
if($este->link){
//Conexão bem sucedida
//echo “link para sussess!<br>”;
$this->ro_exist = verdadeiro;
$this->link_ro = $this->link;
if($this->cur_db){
//Se você já selecionou o banco de dados, você precisa operá-lo uma vez
@mysql_select_db($this->cur_db, $this->link_ro);
}
}outro{
//Falha na conexão
//echo “link ro falhou!<br>”;
$this->link = &$this->link_rw;
}
}
//Configura uma série de bancos de dados somente leitura e conecta-se a um deles
função set_ro_list($ro_list){
if(is_array($ro_list)){
//Selecione aleatoriamente um deles
$link_ro = $ro_list[array_rand($ro_list)];
$this->connect_ro($link_ro['dbhost'], $link_ro['dbuser'], $link_ro['dbpw']);
}
}
função select_db($nomedobd) {
//Opera duas conexões de banco de dados ao mesmo tempo
$this->cur_db = $dbname;
if($this->ro_exist){
@mysql_select_db($dbname, $this->link_ro);
}
return @mysql_select_db($dbname, $this->link_rw);
}
function fetch_array($query, $result_type = MYSQL_ASSOC) {
return mysql_fetch_array($query, $result_type);
}
função fetch_one_array($sql, $type = ”) {
$qr = $this->query($sql, $type);
retorne $this->fetch_array($qr);
}
função consulta($sql, $tipo =”) {
$this->link = &$this->link_rw;
//Determina se a instrução deve ser selecionada
if($this->ro_exist && preg_match ("/^(s*)select/i", $sql)){
$this->link = &$this->link_ro;
}
$func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?
'mysql_unbuffered_query': 'mysql_query';
if(!($query = $func($sql, $this->link)) && $type != 'SILENCIOSO') {
$this->halt('Erro de consulta MySQL', $sql);
}
$this->querynum++;
retornar $consulta;
}
função afetada_rows() {
retornar mysql_affected_rows($this->link);
}
erro de função() {
retornar (($this->link) ? mysql_error($this->link) : mysql_error());
}
função errno() {
return intval(($this->link) ? mysql_errno($this->link) : mysql_errno());
}
resultado da função($consulta, $linha) {
$query = @mysql_result($query, $row);
retornar $consulta;
}
função num_rows($consulta) {
$consulta = mysql_num_rows($consulta);
retornar $consulta;
}
função num_fields($consulta) {
retornar mysql_num_fields($query);
}
função free_result($consulta) {
retornar mysql_free_result($query);
}
função inserir_id() {
return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
}
função buscar_row($consulta) {
$query = mysql_fetch_row($query);
retornar $consulta;
}
função fetch_fields($consulta) {
retornar mysql_fetch_field($query);
}
versão da função() {
retornar mysql_get_server_info($this->link);
}
função fechar() {
return mysql_close($this->link);
}
function halt($mensagem = ”, $sql = ”) {
$dberror = $this->error();
$dberrno = $this->errno();
echo “<div style=”posição:absolute;font-size:11px;font-family:verdana,arial;background:#EBEBEB;padding:0.5em;”>
<b>Erro MySQL</b><br>
<b>Mensagem</b>: $mensagem<br>
<b>SQL</b>: $sql<br>
<b>Erro</b>: $dberror<br>
<b>Errno.</b>: $dberrno<br>
</div>";
saída();
}
}
?>
exemplo.php
<?php
/******************************************
*** mysql-rw-php versão 0.1 @ 16/04/2009
*** código de hqlulu#gmail.com
*** http://www.aslibra.com
*** http://code.google.com/p/mysql-rw-php/
*** modificação de código de class_mysql.php (uchome)
******************************************/
require_once('mysql_rw_php.class.php');
//rw informações
$db_rw = array(
'dbhost'=>'www.aslibra.com',
'dbuser'=>'aslibra',
'dbpw'=>'www.aslibra.com',
'nome do banco de dados'=>'teste'
);
$db_ro = array(
variedade(
'dbhost'=>'www.aslibra.com:4306′,
'dbuser'=>'aslibra',
'dbpw'=>'www.aslibra.com'
)
);
$DB = novo mysql_rw_php;
//conecta mestre
$DB->connect($db_rw[dbhost], $db_rw[dbuser], $db_rw[dbpw], $db_rw[dbname]);
//Método 1: conectar um servidor
$DB->connect_ro($db_ro[0][dbhost], $db_ro[0][dbuser], $db_ro[0][dbpw]);
//Método 2: conectar um servidor de uma lista por rand
$DB->set_ro_list($db_ro);
//envia para rw
$sql = "inserir em um conjunto a='teste'";
$DB->query($sql);
//envia para ro
$sql = "selecione * de um";
$qr = $DB->query($sql);
while($linha = $DB->fetch_array($qr)){
echo $linha[a];
}
?>