Este código se modifica del código de uchome y se procesa para resolver la eficiencia de uchome.
El método de encapsulación es relativamente simple: agregar una extensión de interfaz para la conexión de la base de datos de solo lectura y no usar una base de datos de solo lectura no afecta el uso del código original.
Queda por mejorarse continuamente en el futuro. .
Para mayor comodidad, intente configurar un proyecto de Google:
http://code.google.com/p/mysql-rw-php/Espero
ayudar a los amigos que lo necesitan.
Las características principalesde la separación de lectura y escritura de Mysql implementada por PHP
:
separación simple de lectura y escritura de una base de datos principal, puede agregar más bases de datos de solo lectura, pero no se preocupe por algunas características que no son compatibles. Desventajas: conectar dos bases de datos al mismo tiempo. Al mismo tiempo, el inglés es pobre y escribe algunas palabras
en código PHP para la división de lectura/escritura de MySQL.
característica:
simplemente rw dividir
Un maestro, puede agregar más esclavos.
Soporta todas las funciones de MySQL.
enlace al maestro y esclavo al mismo tiempo
Código PHP:
mysql_rw_php.class.php
<?php
/******************************************
*** mysql-rw-php versión 0.1 @ 2009-4-16
*** código de hqlulu#gmail.com
*** http://www.aslibra.com
*** http://code.google.com/p/mysql-rw-php/
*** código modificado desde class_mysql.php (uchome)
*******************************************/
clase mysql_rw_php {
//Consulta el número
var $númconsulta = 0;
//Conexión de base de datos para la operación actual
var $enlace = nulo;
//conjunto de caracteres
var $juego de caracteres;
//Base de datos actual
var $cur_db = ";
//Si existe una conexión de base de datos de solo lectura válida
var $ro_exist = falso;
//conexión de base de datos de sólo lectura
var $link_ro = nulo;
//Leer y escribir conexión de base de datos
var $enlace_rw = nulo;
función mysql_rw_php(){
}
función conectar($dbhost, $dbuser, $dbpw, $dbname = ”, $pconnect = 0, $halt = TRUE) {
si($pconectar) {
if(!$this->link = @mysql_pconnect($dbhost, $dbuser, $dbpw)) {
$halt && $this->halt('No se puede conectar al servidor MySQL');
}
} demás {
if(!$this->link = @mysql_connect($dbhost, $dbuser, $dbpw)) {
$halt && $this->halt('No se puede conectar al servidor MySQL');
}
}
//Error en la conexión de solo lectura
if(!$this->link && !$halt) devuelve falso;
//Cuando rw no se inicializa, la primera conexión se utiliza como rw
si($this->link_rw == nulo)
$this->link_rw = $this->link;
if($esta->versión() > '4.1′) {
if($este->juego de caracteres) {
@mysql_query("SET Character_set_connection=$this->charset, Character_set_results=$this->charset, Character_set_client=binary", $this->link);
}
if($esta->versión() > '5.0.1′) {
@mysql_query(”SET sql_mode=””, $this->link);
}
}
si($nombrebd) {
$this->select_db($dbname);
}
}
//http://www.knowsky.com/php.asp Conéctese a una base de datos MySQL de solo lectura
función connect_ro($dbhost, $dbuser, $dbpw, $dbname = ”, $pconnect = 0){
si($this->link_rw == nulo)
$this->link_rw = $this->link;
$this->enlace = nulo;
//No generar error de detención
$this->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, false);
si($este->enlace){
//Conexión exitosa
//echo “enlace ro sussess!<br>”;
$this->ro_exist = verdadero;
$this->link_ro = $this->link;
si($this->cur_db){
//Si ya ha seleccionado la base de datos, debe operarla una vez
@mysql_select_db($this->cur_db, $this->link_ro);
}
}demás{
//La conexión falló
//echo “el enlace ro falló!<br>”;
$this->link = &$this->link_rw;
}
}
//Configura una serie de bases de datos de solo lectura y conéctate a una de ellas
función set_ro_list($ro_list){
si(is_array($ro_list)){
//Selecciona aleatoriamente uno de ellos
$enlace_ro = $ro_list[array_rand($ro_list)];
$this->connect_ro($link_ro['dbhost'], $link_ro['dbuser'], $link_ro['dbpw']);
}
}
función select_db($nombrebd) {
//Operar dos conexiones de bases de datos al mismo tiempo
$this->cur_db = $nombrebd;
si($this->ro_exist){
@mysql_select_db($dbname, $this->link_ro);
}
return @mysql_select_db($dbname, $this->link_rw);
}
función fetch_array($consulta, $tipo_resultado = MYSQL_ASSOC) {
devolver mysql_fetch_array($consulta, $tipo_resultado);
}
función fetch_one_array($sql, $tipo = ”) {
$qr = $this->consulta($sql, $tipo);
devolver $this->fetch_array($qr);
}
consulta de función ($ sql, $ tipo = ”) {
$this->link = &$this->link_rw;
//Determinar si seleccionar la declaración
if($this->ro_exist && preg_match ("/^(s*)select/i", $sql)){
$this->link = &$this->link_ro;
}
$func = $tipo == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query')?
'mysql_unbuffered_query' : 'mysql_query';
if(!($consulta = $func($sql, $this->link)) && $tipo != 'SILENCIO') {
$this->halt('Error de consulta MySQL', $sql);
}
$this->querynum++;
devolver $consulta;
}
función filas_afectadas() {
devolver mysql_affected_rows($this->link);
}
error de función() {
return (($this->link) ? mysql_error($this->link): mysql_error());
}
función errno() {
return intval(($this->link) ? mysql_errno($this->link): mysql_errno());
}
resultado de la función ($ consulta, $ fila) {
$consulta = @mysql_result($consulta, $fila);
devolver $consulta;
}
función num_rows($consulta) {
$consulta = mysql_num_rows($consulta);
devolver $consulta;
}
función num_fields($consulta) {
devolver mysql_num_fields($consulta);
}
función free_result($consulta) {
devolver mysql_free_result($consulta);
}
función insertar_id() {
return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
}
función fetch_row($consulta) {
$consulta = mysql_fetch_row($consulta);
devolver $consulta;
}
función fetch_fields($consulta) {
devolver mysql_fetch_field($consulta);
}
versión de función() {
devolver mysql_get_server_info($this->link);
}
función cerrar() {
return mysql_close($this->link);
}
función detener($mensaje = ”, $sql = ”) {
$dberror = $this->error();
$dberrno = $this->errno();
echo “<div style=”posición:absoluta;tamaño de fuente:11px;familia de fuentes:verdana,arial;fondo:#EBEBEB;padding:0.5em;”>
<b>Error de MySQL</b><br>
<b>Mensaje</b>: $mensaje<br>
<b>SQL</b>:$sql<br>
<b>Error</b>: $dberror<br>
<b>Errno.</b>: $dberrno<br>
</div>";
salida();
}
}
?>
ejemplo.php
<?php
/******************************************
*** mysql-rw-php versión 0.1 @ 2009-4-16
*** código de hqlulu#gmail.com
*** http://www.aslibra.com
*** http://code.google.com/p/mysql-rw-php/
*** código modificado desde class_mysql.php (uchome)
*******************************************/
require_once('mysql_rw_php.class.php');
// información rw
$db_rw = matriz(
'dbhost'=>'www.aslibra.com',
'dbuser'=>'aslibra',
'dbpw'=>'www.aslibra.com',
'nombrebd'=>'prueba'
);
$db_ro = matriz(
formación(
'dbhost'=>'www.aslibra.com:4306′,
'dbuser'=>'aslibra',
'dbpw'=>'www.aslibra.com'
)
);
$DB = nuevo mysql_rw_php;
//conectar Maestro
$DB->connect($db_rw[dbhost], $db_rw[dbuser], $db_rw[dbpw], $db_rw[dbname]);
//Método 1: conectar un servidor
$DB->connect_ro($db_ro[0][dbhost], $db_ro[0][dbuser], $db_ro[0][dbpw]);
//Método 2: conectar un servidor de una lista por rand
$DB->set_ro_list($db_ro);
//enviar a rw
$sql = "insertar en un conjunto a='prueba'";
$DB->consulta($sql);
//enviar a ro
$sql = "seleccionar * de a";
$qr = $DB->consulta($sql);
while($fila = $DB->fetch_array($qr)){
echo $fila[a];
}
?>