Phalapi框架連接其他數據庫服務器的操作以及近期踩坑記錄

多數據庫連接

首先我們來看一下單個數據庫的連接操作,這裏官網的文檔說得十分清楚:

數據庫的配置文件爲./config/dbs.php,默認使用的是MySQL數據庫,所以需要配置MySQL的連接信息。servers選項用於配置數據庫服務器相關信息,可以配置多組數據庫實例,每組包括數據庫的賬號、密碼、數據庫名字等信息。不同的數據庫實例,使用不同標識作爲下標。

tables選項用於配置數據庫表的表前綴、主鍵字段和路由映射關係,可以配置多個表,下標爲不帶表前綴的表名,其中__default__下標選項爲缺省的數據庫路由,即未配置的數據庫表將使用這一份默認配置。

示例

return array(
    /**
     * DB數據庫服務器集羣
     */
    'servers' => array(
        'db_master' => array(                         //服務器標記
            'host'      => '127.0.0.1',             //數據庫域名
            'name'      => 'phalapi',               //數據庫名字
            'user'      => 'root',                  //數據庫用戶名
            'password'  => ''",                      //數據庫密碼
            'port'      => 3306,                  //數據庫端口
            'charset'   => 'UTF8',                  //數據庫字符集
        ),
    ),

    /**
     * 自定義路由表
     */
    'tables' => array(
        //通用路由
        '__default__' => array(
            'prefix' => 'tbl_',
            'key' => 'id',
            'map' => array(
                array('db' => 'db_master'),
            ),
        ),
    ),
);

而如果有多個數據庫需要連接進行操作,則只需在servers節點下配置數據庫的相關信息。注意若爲其他服務器上的數據庫,user必須寫爲數據庫的用戶,不能寫root,密碼也需要相對的user的密碼。但是目前只找到利用這種配置方法實例化數據庫中的一張前綴不同的表,若兩個數據庫中的表前綴相同還好說,但是往往不同數據庫的前綴名不一致,這時就需要在tables節點下增加單張數據表的配置了(包括分表)。

'user' => array(                                                //表名
            'prefix' => 'demo_',                                         //表名前綴
            'key' => 'id',                                              //表主鍵名
            'map' => array(
                array('db' => 'demo'),  // 這裏可以指定使用哪個庫
            ),
        ),

另外一種解決辦法是重新實例化一個notorm對象,如$di->notorm2 = new NotORMDatabase($di->config->get('mydbs'), $di->debug);這裏我們將示例的dbs複製新增一個mydbs節點,將自己的數據庫信息填入即可實現數據表前綴的統一問題。

近期踩坑記錄

  1. 微信公衆號網頁授權登錄確實不能在微信外的網頁中打開,但是利用uniapp框架的webview組件在微信瀏覽器內卻無法打開,具體原因未知。
  2. uniapp發佈爲h5版時需要注意在接口服務器上解決跨域問題。在項目目錄./public下的init.php加\PhalApi\DI()->response->addHeaders('Access-Control-Allow-Origin', 'http://ex.example.com');即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章