Kode ini dimodifikasi dari kode uchome dan diproses untuk mengatasi efisiensi uchome.
Metode enkapsulasinya relatif sederhana, menambahkan ekstensi antarmuka untuk koneksi database read-only, dan tidak menggunakan database read-only tidak mempengaruhi penggunaan kode asli.
Kedepannya masih harus terus ditingkatkan. .
Untuk kenyamanan, coba siapkan proyek Google:
http://code.google.com/p/mysql-rw-php/Semoga
dapat membantu teman-teman yang membutuhkan.
Fitur utamapemisahan baca-tulis Mysql diimplementasikan oleh PHP
:
pemisahan baca-tulis sederhana dari database utama, Anda dapat menambahkan lebih banyak database read-only, namun jangan khawatir tentang beberapa fitur yang tidak didukung pada saat yang sama, bahasa Inggrisnya buruk, dan Tulis beberapa kata
kode php untuk pemisahan baca/tulis mysql
fitur:
cukup dipisah
satu master, dapat menambahkan lebih banyak budak
mendukung semua fitur mysql
link ke master dan slave sekaligus
kode PHP:
mysql_rw_php.class.php
<?php
/*********************************************
*** mysql-rw-php versi 0.1 @ 2009-4-16
*** kode oleh hqlulu#gmail.com
*** http://www.aslibra.com
*** http://code.google.com/p/mysql-rw-php/
*** modifikasi kode dari class_mysql.php (uchome)
**********************************************/
kelas mysql_rw_php {
// Kueri nomornya
var $querynum = 0;
//Koneksi database untuk operasi saat ini
var $link = nol;
// Kumpulan karakter
var $rangkaian karakter;
//Database saat ini
var$cur_db = ";
//Apakah ada koneksi database read-only yang valid
var $ro_exist = salah;
//koneksi basis data hanya-baca
var $link_ro = nol;
//Membaca dan menulis koneksi database
var $link_rw = nol;
fungsi mysql_rw_php(){
}
fungsi terhubung($dbhost, $dbuser, $dbpw, $dbname = ”, $pconnect = 0, $halt = TRUE) {
jika($pkoneksi) {
if(!$ini->link = @mysql_pconnect($dbhost, $dbuser, $dbpw)) {
$halt && $this->halt('Tidak dapat terhubung ke server MySQL');
}
} kalau tidak {
if(!$ini->link = @mysql_connect($dbhost, $dbuser, $dbpw)) {
$halt && $this->halt('Tidak dapat terhubung ke server MySQL');
}
}
//Koneksi baca-saja gagal
if(!$this->link && !$halt) mengembalikan false;
//Ketika rw tidak diinisialisasi, koneksi pertama digunakan sebagai rw
jika($ini->link_rw == nol)
$ini->link_rw = $ini->tautan;
if($ini->versi() > '4.1′) {
if($ini->rangkaian karakter) {
@mysql_query("SET character_set_connection=$ini->rangkaian karakter, character_set_results=$ini->rangkaian karakter, character_set_client=biner", $ini->tautan);
}
if($ini->versi() > '5.0.1′) {
@mysql_query(”SET sql_mode=””, $ini->tautan);
}
}
if($namadb) {
$ini->pilih_db($namadb);
}
}
//http://www.knowsky.com/php.asp Hubungkan ke database mysql hanya-baca
fungsi connect_ro($dbhost, $dbuser, $dbpw, $dbname = ”, $pconnect = 0){
jika($ini->link_rw == nol)
$ini->link_rw = $ini->tautan;
$ini->tautan = nol;
//Jangan membuat kesalahan penghentian
$ini->koneksi($dbhost, $dbuser, $dbpw, $dbname, $pconnect, false);
if($ini->tautan){
//Koneksi berhasil
//echo “link ro sussess!<br>”;
$ini->ro_exist = benar;
$ini->link_ro = $ini->tautan;
if($ini->cur_db){
//Jika Anda sudah memilih database, Anda perlu mengoperasikannya satu kali
@mysql_select_db($ini->cur_db, $ini->link_ro);
}
}kalau tidak{
//Koneksi gagal
//echo “tautan ro gagal!<br>”;
$ini->tautan = &$ini->link_rw;
}
}
//Siapkan serangkaian database read-only dan sambungkan ke salah satunya
fungsi set_ro_list($ro_list){
jika(is_array($ro_list)){
//Pilih salah satu secara acak
$link_ro = $ro_list[array_rand($ro_list)];
$ini->connect_ro($link_ro['dbhost'], $link_ro['dbuser'], $link_ro['dbpw']);
}
}
fungsi pilih_db($namadb) {
//Operasikan dua koneksi database secara bersamaan
$ini->cur_db = $dbname;
if($ini->ro_exist){
@mysql_select_db($namadb, $ini->link_ro);
}
return @mysql_select_db($namadb, $ini->link_rw);
}
fungsi ambil_array($kueri, $hasil_tipe = MYSQL_ASSOC) {
kembalikan mysql_fetch_array($query, $result_type);
}
fungsi ambil_satu_array($sql, $tipe = ”) {
$qr = $ini->query($sql, $type);
kembalikan $ini->fetch_array($qr);
}
fungsi kueri($sql, $tipe = ”) {
$ini->tautan = &$ini->link_rw;
//Tentukan apakah akan memilih pernyataan tersebut
if($ini->ro_exist && preg_match ("/^(s*)pilih/i", $sql)){
$ini->tautan = &$ini->link_ro;
}
$func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?
'mysql_unbuffered_query' : 'mysql_query';
if(!($query = $func($sql, $this->link)) && $type != 'SILENT') {
$ini->halt('Kesalahan Kueri MySQL', $sql);
}
$ini->nomor kueri++;
kembalikan $permintaan;
}
fungsi baris_yang terpengaruh() {
kembalikan mysql_affected_rows($ini->tautan);
}
kesalahan fungsi() {
kembali (($ini->tautan) ? mysql_error($ini->tautan) : mysql_error());
}
fungsi salah() {
kembali intval(($ini->link) ? mysql_errno($ini->link) : mysql_errno());
}
hasil fungsi($query, $baris) {
$kueri = @mysql_result($kueri, $baris);
kembalikan $permintaan;
}
fungsi nomor_baris($kueri) {
$kueri = mysql_num_rows($kueri);
kembalikan $permintaan;
}
fungsi num_fields($query) {
kembalikan mysql_num_fields($query);
}
fungsi hasil_bebas($kueri) {
kembalikan mysql_free_result($query);
}
fungsi sisipkan_id() {
kembali ($id = mysql_insert_id($ini->link)) >= 0 ? $id : $ini->hasil($ini->query("PILIH last_insert_id()"), 0);
}
fungsi ambil_baris($kueri) {
$kueri = mysql_fetch_row($kueri);
kembalikan $permintaan;
}
fungsi ambil_bidang($kueri) {
kembalikan mysql_fetch_field($query);
}
versi fungsi() {
kembalikan mysql_get_server_info($ini->tautan);
}
fungsi tutup() {
return mysql_close($ini->tautan);
}
fungsi berhenti($pesan = ”, $sql = ”) {
$dberror = $ini->kesalahan();
$dberrno = $ini->errno();
echo “<div style=”position:absolute;ukuran font:11px;font-family:verdana,arial;latar belakang:#EBEBEB;padding:0.5em;”>
<b>Kesalahan MySQL</b><br>
<b>Pesan</b>: $pesan<br>
<b>SQL</b>: $sql<br>
<b>Kesalahan</b>: $dberror<br>
<b>Errno.</b>: $dberrno<br>
</div>";
KELUAR();
}
}
?>
contoh.php
<?php
/*********************************************
*** mysql-rw-php versi 0.1 @ 2009-4-16
*** kode oleh hqlulu#gmail.com
*** http://www.aslibra.com
*** http://code.google.com/p/mysql-rw-php/
*** modifikasi kode dari class_mysql.php (uchome)
**********************************************/
require_once('mysql_rw_php.class.php');
//info rw
$db_rw = susunan(
'dbhost'=>'www.aslibra.com',
'dbuser'=>'aslibra',
'dbpw'=>'www.aslibra.com',
'namadb'=>'tes'
);
$db_ro = susunan(
susunan(
'dbhost'=>'www.aslibra.com:4306′,
'dbuser'=>'aslibra',
'dbpw'=>'www.aslibra.com'
)
);
$DB = mysql_rw_php baru;
//hubungkan Guru
$DB->koneksi($db_rw[dbhost], $db_rw[dbuser], $db_rw[dbpw], $db_rw[nama db]);
//Metode 1: menghubungkan satu server
$DB->connect_ro($db_ro[0][dbhost], $db_ro[0][dbuser], $db_ro[0][dbpw]);
//Metode 2: menghubungkan satu server dari daftar dengan rand
$DB->set_ro_list($db_ro);
//kirim ke rw
$sql = "masukkan ke dalam himpunan a='test'";
$DB->kueri($sql);
//kirim ke ro
$sql = "pilih * dari a";
$qr = $DB->kueri($sql);
while($baris = $DB->fetch_array($qr)){
gema $baris[a];
}
?>