Dieser Code wurde gegenüber dem uchome-Code modifiziert und verarbeitet, um die Effizienz von uchome zu ermitteln.
Die Kapselungsmethode ist relativ einfach. Das Hinzufügen einer Schnittstellenerweiterung für schreibgeschützte Datenbankverbindungen und die Nichtverwendung einer schreibgeschützten Datenbank hat keinen Einfluss auf die Verwendung des Originalcodes.
Es muss auch in Zukunft kontinuierlich verbessert werden. .
Versuchen Sie der Einfachheit halber, ein Google-Projekt einzurichten:
http://code.google.com/p/mysql-rw-php/Ich hoffe,
Freunden in Not helfen zu können.
Die Hauptfunktionender von PHP implementierten Lese-/Schreibtrennung in MySQL
:
Einfache Lese-/Schreibtrennung einer Hauptdatenbank, Sie können weitere schreibgeschützte Datenbanken hinzufügen, aber machen Sie sich keine Sorgen über einige Funktionen, die nicht unterstützt werden: Verbinden von zwei Datenbanken gleichzeitig Gleichzeitig ist das Englisch schlecht und das Schreiben von
PHP-Code für MySQL ist in ein paar Wörter aufgeteilt
Besonderheit:
einfach rw teilen
ein Master, kann weitere Slaves hinzufügen
Unterstützt alle MySQL-Funktionen
Link zum Master und Slave gleichzeitig
PHP-Code:
mysql_rw_php.class.php
<?php
/*********************************************
*** mysql-rw-php Version 0.1 vom 16.04.2009
*** Code von hqlulu#gmail.com
*** http://www.aslibra.com
*** http://code.google.com/p/mysql-rw-php/
*** Code ändern von class_mysql.php (uchome)
*****************************************/
Klasse mysql_rw_php {
//Fragen Sie die Nummer ab
var $querynum = 0;
//Datenbankverbindung für den aktuellen Vorgang
var $link = null;
//Zeichensatz
var $charset;
//Aktuelle Datenbank
var $cur_db = ";
//Ob eine gültige schreibgeschützte Datenbankverbindung besteht
var $ro_exist = false;
//schreibgeschützte Datenbankverbindung
var $link_ro = null;
//Datenbankverbindung lesen und schreiben
var $link_rw = null;
Funktion mysql_rw_php(){
}
function connect($dbhost, $dbuser, $dbpw, $dbname = ”, $pconnect = 0, $halt = TRUE) {
if($pconnect) {
if(!$this->link = @mysql_pconnect($dbhost, $dbuser, $dbpw)) {
$halt && $this->halt('Es kann keine Verbindung zum MySQL-Server hergestellt werden');
}
} anders {
if(!$this->link = @mysql_connect($dbhost, $dbuser, $dbpw)) {
$halt && $this->halt('Es kann keine Verbindung zum MySQL-Server hergestellt werden');
}
}
//Schreibgeschützte Verbindung fehlgeschlagen
if(!$this->link && !$halt) return false;
//Wenn rw nicht initialisiert ist, wird die erste Verbindung als rw verwendet
if($this->link_rw == null)
$this->link_rw = $this->link;
if($this->version() > '4.1′) {
if($this->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($dbname) {
$this->select_db($dbname);
}
}
//http://www.knowsky.com/php.asp Stellen Sie eine Verbindung zu einer schreibgeschützten MySQL-Datenbank her
Funktion connect_ro($dbhost, $dbuser, $dbpw, $dbname = ”, $pconnect = 0){
if($this->link_rw == null)
$this->link_rw = $this->link;
$this->link = null;
//Keinen Stopp-Fehler generieren
$this->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, false);
if($this->link){
//Verbindung erfolgreich
//echo „link ro sussess!<br>“;
$this->ro_exist = true;
$this->link_ro = $this->link;
if($this->cur_db){
//Wenn Sie die Datenbank bereits ausgewählt haben, müssen Sie sie einmal bedienen
@mysql_select_db($this->cur_db, $this->link_ro);
}
}anders{
//Verbindung fehlgeschlagen
//echo „Link ro fehlgeschlagen!<br>“;
$this->link = &$this->link_rw;
}
}
// Richten Sie eine Reihe schreibgeschützter Datenbanken ein und stellen Sie eine Verbindung zu einer davon her
Funktion set_ro_list($ro_list){
if(is_array($ro_list)){
//Wähle zufällig eine davon aus
$link_ro = $ro_list[array_rand($ro_list)];
$this->connect_ro($link_ro['dbhost'], $link_ro['dbuser'], $link_ro['dbpw']);
}
}
Funktion select_db($dbname) {
//Zwei Datenbankverbindungen gleichzeitig betreiben
$this->cur_db = $dbname;
if($this->ro_exist){
@mysql_select_db($dbname, $this->link_ro);
}
return @mysql_select_db($dbname, $this->link_rw);
}
Funktion fetch_array($query, $result_type = MYSQL_ASSOC) {
return mysql_fetch_array($query, $result_type);
}
Funktion fetch_one_array($sql, $type = ”) {
$qr = $this->query($sql, $type);
return $this->fetch_array($qr);
}
Funktionsabfrage($sql, $type = ”) {
$this->link = &$this->link_rw;
//Bestimmen Sie, ob die Anweisung ausgewählt werden soll
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 != 'SILENT') {
$this->halt('MySQL-Abfragefehler', $sql);
}
$this->querynum++;
$query zurückgeben;
}
Funktion Affect_rows() {
return mysql_affected_rows($this->link);
}
Funktionsfehler() {
return (($this->link) ? mysql_error($this->link) : mysql_error());
}
Funktion errno() {
return intval(($this->link) ? mysql_errno($this->link) : mysql_errno());
}
Funktionsergebnis($query, $row) {
$query = @mysql_result($query, $row);
$query zurückgeben;
}
Funktion num_rows($query) {
$query = mysql_num_rows($query);
$query zurückgeben;
}
Funktion num_fields($query) {
return mysql_num_fields($query);
}
Funktion free_result($query) {
return mysql_free_result($query);
}
Funktion insert_id() {
return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
}
Funktion fetch_row($query) {
$query = mysql_fetch_row($query);
$query zurückgeben;
}
Funktion fetch_fields($query) {
return mysql_fetch_field($query);
}
Funktionsversion() {
return mysql_get_server_info($this->link);
}
Funktion close() {
return mysql_close($this->link);
}
Funktion halt($message = ”, $sql = ”) {
$dberror = $this->error();
$dberrno = $this->errno();
echo „<div style=“position:absolute;font-size:11px;font-family:verdana,arial;background:#EBEBEB;padding:0.5em;“>
<b>MySQL-Fehler</b><br>
<b>Nachricht</b>: $message<br>
<b>SQL</b>: $sql<br>
<b>Fehler</b>: $dberror<br>
<b>Fehlernr.</b>: $dberrno<br>
</div>";
Ausfahrt();
}
}
?>
example.php
<?php
/*********************************************
*** mysql-rw-php Version 0.1 vom 16.04.2009
*** Code von hqlulu#gmail.com
*** http://www.aslibra.com
*** http://code.google.com/p/mysql-rw-php/
*** Code ändern von class_mysql.php (uchome)
*****************************************/
require_once('mysql_rw_php.class.php');
//rw info
$db_rw = array(
'dbhost'=>'www.aslibra.com',
'dbuser'=>'aslibra',
'dbpw'=>'www.aslibra.com',
'dbname'=>'test'
);
$db_ro = array(
Array(
'dbhost'=>'www.aslibra.com:4306′,
'dbuser'=>'aslibra',
'dbpw'=>'www.aslibra.com'
)
);
$DB = new mysql_rw_php;
//Master verbinden
$DB->connect($db_rw[dbhost], $db_rw[dbuser], $db_rw[dbpw], $db_rw[dbname]);
//Methode 1: Einen Server verbinden
$DB->connect_ro($db_ro[0][dbhost], $db_ro[0][dbuser], $db_ro[0][dbpw]);
//Methode 2: Einen Server aus einer Liste per Rand verbinden
$DB->set_ro_list($db_ro);
//sende an rw
$sql = "insert into a set a='test'";
$DB->query($sql);
//an ro senden
$sql = "select * from a";
$qr = $DB->query($sql);
while($row = $DB->fetch_array($qr)){
echo $row[a];
}
?>