最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php多數(shù)據(jù)庫(kù)支持的應(yīng)用程序設(shè)計(jì)

 更新時(shí)間:2008年08月12日 12:26:47   作者:  
以前做PHP應(yīng)用,多數(shù)是單數(shù)據(jù)庫(kù)數(shù)據(jù)查詢和更新,頂多也是主從數(shù)據(jù)庫(kù)的支持,實(shí)現(xiàn)起來(lái)相對(duì)簡(jiǎn)單。主從數(shù)據(jù)庫(kù)的問(wèn)題在于,當(dāng)會(huì)話存儲(chǔ)在數(shù)據(jù)庫(kù)的時(shí)候,同步將可能出現(xiàn)問(wèn)題,也就是說(shuō)有可能出現(xiàn)會(huì)話的中斷。

首先以單例摸式創(chuàng)建DB類:
復(fù)制代碼 代碼如下:

<?php
if (!defined("DB_FETCH_ASSOC")) {
    define("DB_FETCH_ASSOC", 1);
}

if (!defined("DB_FETCH_ROW")) {
    define("DB_FETCH_ROW", 2);
}

if (!defined("DB_FETCH_ARRAY")) {
    define("DB_FETCH_ARRAY", 3);
}

if (!defined("DB_FETCH_DEFAULT")) {
    define("DB_FETCH_DEFAULT", DB_FETCH_ASSOC);
}
class DB {
    function DB($dsn, $db_key, $p_conn, $fetch_mode) {
        $this->dsn        = $dsn;
        $this->db_key     = $db_key;
        $this->sql        = '';
        $this->sqls       = array();
        $this->u_sqls     = array();
        $this->q_sqls     = array();
        $this->u_conn     = null;
        $this->q_conn     = null;
        $this->p_conn     = $p_conn;
        $this->fecth_mode = $fetch_mode;
        $this->query_num  = 0;
        $this->update_num = 0;
    }

    function &init(& $dsn, $db_key, $p_conn = false, $fetch_mode = DB_FETCH_DEFAULT) {
        static $db;
        $db_key = explode('.', $db_key);
        $db_key = "['" . implode("']['" , $db_key) . "']";
        eval('$flag = isset($db' . $db_key . ');');
        eval("\$db_info = \$dsn['db_info']" . $db_key . ";");
        if (!$flag) {
            $obj = new DB($db_info, $db_key, $p_conn, $fetch_mode);
            eval('$db' . $db_key . ' = $obj;');
            unset($obj);
        }
        return $db;
    }
}
$db = &DB::init($configs, 'blog.0');
print_r($db);
?>

  從上面打印結(jié)果可以看出,blog數(shù)據(jù)庫(kù)集群的第一組數(shù)據(jù)庫(kù)服務(wù)器被載入到$this->dsn中了。這個(gè)下面就是簡(jiǎn)單的數(shù)據(jù)COPY的主從服務(wù)器,所以可以使用隨機(jī)數(shù)來(lái)指定到某一臺(tái)服務(wù)器。以下是一個(gè)簡(jiǎn)單的隨機(jī)數(shù)實(shí)現(xiàn):
復(fù)制代碼 代碼如下:

class DB {
    //....

    function connectDB($type = "master") {
        if ($type == "master") {
            $db_host = $this->dsn["master"]["db_host"];
            $db_name = $this->dsn["master"]["db_name"];
            $db_user = $this->dsn["master"]["db_user"];
            $db_pass = $this->dsn["master"]["db_pass"];
            $this->u_conn = mysqli_connect($db_host, $db_user, $db_pass);
            $this->selectDB($db_name, $this->conn);
            if (!$this->u_conn) {
                $message = "Update DataBase Connect False : ($db_host, $db_user, ******) !";
                $this->error($message, 0);
            }
        } else {
            if (empty($_COOKIE[$_configs['cookie_prefix'] . 'db_no'])) {
                $db_no = array_rand($this->dsn["db_info"]["slave"]);
            } else {
                $db_no = $_COOKIE[$_configs['cookie_prefix'] . 'db_no'];
            }
            $db_info = $this->dsn["slave"][$db_no];
            $db_host = $db_info["db_host"];
            $db_name = $db_info["db_name"];
            $db_user = $db_info["db_user"];
            $db_pass = $db_info["db_pass"];
            $this->q_conn = mysqli_connect($db_host, $db_user, $db_pass);

            if (!$this->q_conn) {
                if (!$this->u_conn) {
                    $this->connectDB();
                }
                $this->q_conn = $this->u_conn;
                if (!$this->q_conn) {
                    $message = "Query DataBase Connect False : ($db_host, $db_user, ******) !";
                    $this->error($message, 0);
                }
            } else {
                $this->selectDB($db_name, $this->q_conn);
            }
        }
    }

    function selectDB($db_name, $conn) {
        if ($db_name != null) {
            if(! mysqli_select_db($conn, $db_name)) {
                $code = mysqli_errno($conn);
                $message = mysqli_error($conn);
                $this->error($message, $code);
            }
            return true;
        }
        return false;
    }

    function query($sql, $limit = 1, $quick = false) {
        if ($limit != null) {
            $sql = $sql . " LIMIT " . $limit;
        }
        $this->sqls[] = $sql;
        $this->q_sqls[] = $sql;
        $this->sql = $sql;

        if (empty($this->q_conn)) {
            $this->connectDB("slave");
        }
        $this->qrs = mysqli_query($this->q_conn, $sql, $quick ? MYSQLI_USE_RESULT : MYSQLI_STORE_RESULT);
        if (!$this->qrs) {
            $code = mysqli_errno($this->q_conn);
            $message = mysqli_error($this->q_conn);
            $this->error($message, $code);
        }
        $this->query_num++;
        return $this->qrs;
    }

    function update($sql) {
        $this->sql = $sql;
        $this->sqls[] = $this->sql;
        $this->u_sqls[] = $this->sql;
        if ($this->u_conn == null) {
            $this->connectDB("master");
        }

        $this->urs = mysqli_query($this->u_conn, $sql, MYSQLI_USE_RESULT);
        $this->update_num++;

        if (!$this->urs) {
            return false;
        } else {
            return true;
        }
    }
}

  至此,基本框架已經(jīng)出來(lái)了,來(lái)看看調(diào)用方法: <?php
// 連接到第一組會(huì)話服務(wù)器
$db = &DB::init($configs, 'session.0');
//  執(zhí)行一次查詢
$db['session'][0]->query('SELECT ...');

//  再次連接BLOG服務(wù)器
$db = &DB::init($configs, 'blog.1');
//  執(zhí)行一次更新
$db['blog'][1]->update('UPDATE ...');

//  再次調(diào)用會(huì)話更新
$db['session'][0]->update('INSERT ...');
?>

相關(guān)文章

  • php將時(shí)間差轉(zhuǎn)換為字符串提示

    php將時(shí)間差轉(zhuǎn)換為字符串提示

    通過(guò)傳入數(shù)據(jù)庫(kù)中存儲(chǔ)的文章發(fā)表時(shí)的UNIX時(shí)間戳,來(lái)轉(zhuǎn)化為例如 幾分鐘前,幾小時(shí)前,幾天前 這樣的提示。如微博
    2011-09-09
  • PHP編程一定要改掉的5個(gè)不良習(xí)慣

    PHP編程一定要改掉的5個(gè)不良習(xí)慣

    在項(xiàng)目的每一次提交之后,我都會(huì)進(jìn)行大量代碼審查,會(huì)經(jīng)??吹揭恍┲貜?fù)出現(xiàn)的錯(cuò)誤。以下這五個(gè)錯(cuò)誤應(yīng)該要及時(shí)糾正,這是糾正它們的方法。
    2020-09-09
  • PHP自定義函數(shù)獲取URL中一級(jí)域名的方法

    PHP自定義函數(shù)獲取URL中一級(jí)域名的方法

    這篇文章主要介紹了PHP自定義函數(shù)獲取URL中一級(jí)域名的方法,涉及字符串與數(shù)組相關(guān)操作技巧,需要的朋友可以參考下
    2016-08-08
  • PHP生成可點(diǎn)擊刷新的驗(yàn)證碼簡(jiǎn)單示例

    PHP生成可點(diǎn)擊刷新的驗(yàn)證碼簡(jiǎn)單示例

    這篇文章主要介紹了PHP生成可點(diǎn)擊刷新的驗(yàn)證碼,結(jié)合簡(jiǎn)單實(shí)例形式分析了php驗(yàn)證碼的實(shí)現(xiàn)與調(diào)用顯示方法,涉及js動(dòng)態(tài)調(diào)用驗(yàn)證碼php文件的相關(guān)技巧,需要的朋友可以參考下
    2016-05-05
  • PHP實(shí)現(xiàn)的觀察者模式實(shí)例

    PHP實(shí)現(xiàn)的觀察者模式實(shí)例

    這篇文章主要介紹了PHP實(shí)現(xiàn)的觀察者模式,結(jié)合具體實(shí)例形式分析了php觀察者模式的定義與使用方法,需要的朋友可以參考下
    2017-06-06
  • PHP 采集心得技巧

    PHP 采集心得技巧

    今天給大家共享一下我的采集代碼! 思路: 采集程序的思路很簡(jiǎn)單大體可以分為以下幾個(gè)步驟
    2009-05-05
  • PHP中使用grpc服務(wù)的教程詳解

    PHP中使用grpc服務(wù)的教程詳解

    這篇文章主要為大家詳細(xì)介紹了PHP中使用grpc服務(wù)的教程相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • php繪圖中顯示不出圖片的原因及解決

    php繪圖中顯示不出圖片的原因及解決

    php繪圖首先要確認(rèn)gd庫(kù)是否啟用,到php.ini文件中,找到extension=php_gd2.dll將前面的;去掉,重新啟動(dòng)服務(wù)器
    2014-03-03
  • php下正則來(lái)匹配dede模板標(biāo)簽的代碼

    php下正則來(lái)匹配dede模板標(biāo)簽的代碼

    用正則來(lái)匹配dede的標(biāo)簽,對(duì)于以后想實(shí)現(xiàn)dedecms那樣的模板標(biāo)簽的朋友與想研究dedecms模板標(biāo)簽的朋友可以參考下。
    2010-08-08
  • 如何在PHP程序中防止盜鏈

    如何在PHP程序中防止盜鏈

    php下用cookes實(shí)現(xiàn)防盜鏈的效果代碼
    2008-04-04

最新評(píng)論

根河市| 阿拉善右旗| 梨树县| 柯坪县| 田东县| 丹棱县| 墨脱县| 正安县| 安乡县| 景德镇市| 内江市| 寿阳县| 霍城县| 旬邑县| 澄城县| 金川县| 清流县| 赤城县| 六盘水市| 屯昌县| 杨浦区| 吴堡县| 分宜县| 交城县| 上思县| 武胜县| 磐石市| 瑞丽市| 南京市| 昂仁县| 建阳市| 同德县| 海南省| 宁阳县| 朝阳市| 焦作市| 辽宁省| 威远县| 嘉义县| 建宁县| 方城县|