تم تعديل هذا الكود من كود uchome وتمت معالجته لحل كفاءة uchome.
طريقة التغليف بسيطة نسبيًا، حيث أن إضافة ملحق واجهة للاتصال بقاعدة بيانات للقراءة فقط، وعدم استخدام قاعدة بيانات للقراءة فقط لا يؤثر على استخدام الكود الأصلي.
ويبقى أن يتم تحسينها بشكل مستمر في المستقبل. .
للراحة، حاول إعداد مشروع Google:
http://code.google.com/p/mysql-rw-php/نأمل
في مساعدة الأصدقاء المحتاجين.
الميزات الرئيسيةلفصل القراءة والكتابة في Mysql الذي تنفذه PHP
:
فصل بسيط للقراءة والكتابة لقاعدة البيانات الرئيسية، يمكنك إضافة المزيد من قواعد البيانات للقراءة فقط، ولكن لا تقلق بشأن بعض الميزات غير المدعومة: ربط قاعدتي بيانات في في الوقت نفسه، اللغة الإنجليزية ضعيفة، واكتب بضع كلمات
من كود php لتقسيم القراءة/الكتابة لـ mysql
ميزة:
ببساطة تقسيم rw
سيد واحد يمكنه إضافة المزيد من العبيد
دعم جميع ميزات MySQL
رابط إلى السيد والعبد في نفس الوقت
كود PHP:
mysql_rw_php.class.php
<?php
/*********************************************
*** mysql-rw-php الإصدار 0.1 @ 2009-4-16
*** الكود بواسطة hqlulu#gmail.com
*** http://www.aslibra.com
*** http://code.google.com/p/mysql-rw-php/
*** تعديل الكود من class_mysql.php (uchome)
********************************************/
فئة mysql_rw_php {
// الاستعلام عن الرقم
فار $querynum = 0;
// اتصال قاعدة البيانات للعملية الحالية
فار $link = null;
// مجموعة الأحرف
فار $ محارف؛
// قاعدة البيانات الحالية
var $cur_db = ";
// ما إذا كان هناك اتصال صالح بقاعدة البيانات للقراءة فقط
var $ro_exist = false;
// اتصال قاعدة البيانات للقراءة فقط
var $link_ro = null;
// قراءة وكتابة اتصال قاعدة البيانات
var $link_rw = null;
الدالة mysql_rw_php(){
}
وظيفة الاتصال($dbhost، $dbuser، $dbpw، $dbname = "، $pconnect = 0، $halt = TRUE) {
إذا($pconnect) {
إذا(!$this->link = @mysql_pconnect($dbhost, $dbuser, $dbpw)) {
$halt && $this->halt('لا يمكن الاتصال بخادم MySQL');
}
} آخر {
إذا(!$this->link = @mysql_connect($dbhost, $dbuser, $dbpw)) {
$halt && $this->halt('لا يمكن الاتصال بخادم MySQL');
}
}
// فشل الاتصال للقراءة فقط
if(!$this->link && !$halt) يُرجع false;
// عندما لا تتم تهيئة rw، يتم استخدام الاتصال الأول كـ rw
إذا($this->link_rw == فارغ)
$this->link_rw = $this->link;
إذا($this->version() > '4.1') {
إذا($هذا->مجموعة الأحرف) {
@mysql_query("SET Character_set_connection=$this->مجموعة الأحرف, Character_set_results=$this->مجموعة الأحرف, Character_set_client=binary", $this->link);
}
إذا($this->version() > '5.0.1') {
@mysql_query("SET sql_mode="", $this->link);
}
}
إذا($DBname) {
$this->select_db($dbname);
}
}
//http://www.knowsky.com/php.asp الاتصال بقاعدة بيانات MySQL للقراءة فقط
وظيفة Connect_ro($dbhost, $dbuser, $dbpw, $dbname = ", $pconnect = 0){
إذا($this->link_rw == فارغ)
$this->link_rw = $this->link;
$this->link = null;
// لا تولد خطأ التوقف
$this->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, false);
إذا($هذا->الرابط){
//الاتصال ناجح
//echo "link ro sussess!<br>";
$this->ro_exist = true;
$this->link_ro = $this->link;
إذا($هذا->cur_db){
//إذا كنت قد حددت قاعدة البيانات بالفعل، فستحتاج إلى تشغيلها مرة واحدة
@mysql_select_db($this->cur_db, $this->link_ro);
}
}آخر{
// فشل الاتصال
// صدى "فشل الارتباط ro!<br>";
$this->link = &$this->link_rw;
}
}
// قم بإعداد سلسلة من قواعد البيانات للقراءة فقط واتصل بواحدة منها
الدالة set_ro_list($ro_list){
إذا (is_array($ro_list)){
// اختر واحدًا منهم بشكل عشوائي
$link_ro = $ro_list[array_rand($ro_list)];
$this->connect_ro($link_ro['dbhost'], $link_ro['dbuser'], $link_ro['dbpw']);
}
}
وظيفة Select_db($dbname) {
// تشغيل اتصالين بقاعدة البيانات في نفس الوقت
$this->cur_db = $dbname;
إذا($هذا->ro_exist){
@mysql_select_db($dbname, $this->link_ro);
}
return @mysql_select_db($dbname, $this->link_rw);
}
الدالة fetch_array($query, $result_type = MYSQL_ASSOC) {
إرجاع mysql_fetch_array($query, $result_type);
}
الدالة fetch_one_array($sql, $type = ”) {
$qr = $this->query($sql, $type);
إرجاع $this->fetch_array($qr);
}
استعلام الوظيفة($sql، $type = ") {
$this->link = &$this->link_rw;
// تحديد ما إذا كنت تريد تحديد العبارة
إذا($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';
إذا(!($query = $func($sql, $this->link)) && $type != 'SILENT') {
$this->halt('خطأ في استعلام MySQL', $sql);
}
$this->querynum++;
إرجاع استعلام $؛
}
الوظيفة المتأثرة () {
إرجاع mysql_affected_rows($this->link);
}
خطأ في الوظيفة () {
return (($this->link) ? mysql_error($this->link) : mysql_error());
}
وظيفة خطأ () {
return intval(($this->link) ? mysql_errno($this->link) : mysql_errno());
}
نتيجة الوظيفة(استعلام $، صف $) {
$query = @mysql_result($query, $row);
إرجاع استعلام $؛
}
وظيفة num_rows(استعلام $) {
$query = mysql_num_rows($query);
إرجاع استعلام $؛
}
وظيفة num_fields($query) {
إرجاع mysql_num_fields($query);
}
الدالة free_result($query) {
إرجاع mysql_free_result($query);
}
وظيفة إدراج_معرف () {
return ($id = mysql_insert_id($this->link)) >= 0 $id : $this->result($this->query("SELECT last_insert_id()"), 0);
}
وظيفة fetch_row($query) {
$query = mysql_fetch_row($query);
إرجاع استعلام $؛
}
وظيفة fetch_fields($query) {
إرجاع mysql_fetch_field($query);
}
إصدار الوظيفة () {
إرجاع mysql_get_server_info($this->link);
}
إغلاق الوظيفة () {
إرجاع mysql_ Close($this->link);
}
توقف الوظيفة($message = ", $sql = ") {
$dberror = $this->error();
$dberrno = $this->errno();
صدى "<div style="position:absolute;font-size:11px;font-family:verdana,arial;background:#EBEBEB;padding:0.5em;">
<b>خطأ في MySQL</b><br>
<b>الرسالة</b>: $message<br>
<b>SQL</b>: $sql<br>
<b>خطأ</b>: $dberror<br>
<b>إيرنو.</b>: $dberrno<br>
</div>";
مخرج()؛
}
}
?>
example.php
<?php
/*********************************************
*** mysql-rw-php الإصدار 0.1 @ 2009-4-16
*** الكود بواسطة hqlulu#gmail.com
*** http://www.aslibra.com
*** http://code.google.com/p/mysql-rw-php/
*** تعديل الكود من class_mysql.php (uchome)
********************************************/
require_once('mysql_rw_php.class.php');
// معلومات rw
$db_rw = المصفوفة(
'dbhost'=>'www.aslibra.com',
'dbuser'=>'aslibra',
'dbpw'=>'www.aslibra.com',
'dbname'=>'اختبار'
);
$db_ro = صفيف(
صفيف (
'dbhost'=>'www.aslibra.com:4306',
'dbuser'=>'aslibra',
'dbpw'=>'www.aslibra.com'
)
);
$DB = new mysql_rw_php;
// اتصال ماستر
$DB->connect($db_rw[dbhost], $db_rw[dbuser], $db_rw[dbpw], $db_rw[dbname]);
// الطريقة الأولى: توصيل خادم واحد
$DB->connect_ro($db_ro[0][dbhost], $db_ro[0][dbuser], $db_ro[0][dbpw]);
// الطريقة الثانية: توصيل خادم واحد من قائمة بواسطة Rand
$DB->set_ro_list($db_ro);
// أرسل إلى rw
$sql = "أدخل في المجموعة a='اختبار'";
$DB->query($sql);
// أرسل إلى ro
$sql = "اختر * من a";
$qr = $DB->query($sql);
بينما($row = $DB->fetch_array($qr)){
صدى $row[a];
}
?>