国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

API后端框架Godtail3-DB組件

moven_j / 2212人閱讀

摘要:另外使用預處理語句,能有效預防注入。調用方法如下單個多個每種數據庫支持的操作和連接方式不一樣,使用抽象類實現通用功能。例如在抽象類,定義屬性,和,用來標記,每個支持的和,例如支持,不支持或者說實現的方式不一致。

來自博客:神的尾巴,原文鏈接

已經提交到github,DB組件代碼,代碼質量一般,大家將就著看 :)

使用PDO

基于PDO,PDO提供了一個數據訪問抽象層,能夠支持多種數據庫。另外使用預處理語句,能有效預防SQL注入

預處理語句是分兩次發送到數據庫的,第一次發送語義,例如: selecet * from user where username = ? and password = ? limit 1,如果不使用預處理語句,就可能導致sql注入。例如,用戶名:godtail,密碼:123456 or 1 = 1。但是如果是預處理語句的話,會把語義和數據分兩次發送到數據庫。這樣就防止數據影響SQL語義,導致SQL注入(需要設置PDO::ATTR_EMULATE_PREPAREStrue,否則會在PHP模擬處理,進行數據轉義)。

支持多個數據庫

定義靜態變量用來接收配置文件,用來配置單個或者多個數據庫。

#單個數據庫
return [
    "dbType" => "Mysql",
    "host" => "127.0.0.1",
    "database" => "blog",
    "port" => "3306",
    "user" => "root",
    "password" => "root",
    "charset" => "utf8"
]

#多個數據庫
return [
    "main" => [
        "dbType" => "Mysql",
        "host" => "127.0.0.1",
        "database" => "blog",
        "port" => "3306",
        "user" => "root",
        "password" => "root",
        "charset" => "utf8"
    ]
    "log" => [
        "dbType" => "Mysql",
        "host" => "127.0.0.1",
        "database" => "blog_log",
        "port" => "3306",
        "user" => "root",
        "password" => "root",
        "charset" => "utf8"
    ]
]

使用單例,防止多次初始化同一個DB,保證一個DB只有一個連接。

調用方法如下:

#單個
$db = Db::instance();

#多個
$dbLog = DB::instance("log");

每種數據庫支持的操作和連接方式不一樣,使用抽象類Driver實現通用功能。然后,每種數據庫驅動繼承Driver,負責實現例如連接方式等,不同數據庫的特有功能。在實例化的時候,會根據配置的dbType,返回每個db對于的驅動。

支持類似TP or Laravel的連貫操作

我把連貫操作分為兩類:

設置數據的dataOpt。例如:where, field, limit...

執行最后查詢或修改操作的endOpt。例如: find, select...

在抽象類Driver,定義protected屬性,$dataOpt$endOpt,用來標記,每個db支持的dataOptendOpt,例如Mysql支持limitSQL Server不支持(或者說實現的方式不一致)。

dataOpt實現接口DataOpt,提供方法parse,返回數據包含,sqlPart用來拼裝sql,paramssql ?對應的參數。

interface DataOpt
{
    /**
     * @return array
     *  [
     *      "sqlPart" => " where name = ?",
     *      "params" => ["godtail"]
     *  ]
     */
    public static function parse($arguments);
}

在調用的時候,使用Driver的魔法方法__call,如果是dataOpt,設置數據到$data變量,如果是endOpt,根據endOpt設置的執行順序,執行對于數據的解析。

判斷是否有endOptAfter方法或endOptBefore,依次調用(后面打算使用Hook實現)。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22009.html

相關文章

  • API后端框架Godtail2-路由組件

    摘要:另外這個框架作為后端純框架。當前博客就是用這個組件寫的,代碼也在上。還需完善的一些地方近幾天抽空解決下自定義路由添加正則匹配。的格式換行數據內容換行數據內容最后一個目前是通過正則來解析處理的,如果設置了。使用生成臨時文件。 來自博客:神的尾巴,原文鏈接 已提交到github,路由組件代碼,代碼質量一般,大家將就著看 : ) 組件思路 現在都是單入口,通過index.php配置組件,然后...

    summerpxy 評論0 收藏0
  • EggBorn.js:一款頂級Javascript全棧開發框架

    摘要:是什么是一款頂級全棧開發框架。漸進式開發由于模塊的高度內聚,可以將業務以模塊的形式沉淀,在多個項目中重復使用,既可貢獻到開源社區,也可部署到公司內部私有倉庫。模塊發布當項目中的模塊代碼穩定后,可以將模塊公開發布,貢獻到開源社區。 EggBorn.js是什么 EggBorn.js是一款頂級Javascript全棧開發框架。 EggBorn.js是采用Javascript進行全棧開發的最佳...

    dayday_up 評論0 收藏0
  • 構建前端項目

    摘要:解決思路服務器端渲染服務器端和前端公用同一個應用,然后通過構建工具及配置,確定哪些組件需要再服務器端渲染,那些組件需要再客戶端渲染。服務器端渲染,由框架與構建工具配合,并依據一定的項目結構和編碼方式,共同運行。 分離 為什么需要 前后端分離、web服務器與static服務器分離: 前端與后端耦合 (需求) 自動化、工程化的構建前端的代碼 (基礎條件) 模塊化、組件化,項目共享代碼 (...

    mindwind 評論0 收藏0
  • 一種SPA(單頁面應用)架構

    摘要:個人認為單頁面應用的優勢相當明顯前后端職責分離,架構清晰前端進行交互邏輯,后端負責數據處理。上面的這種單頁面應用也有其相應的一種開發工作流,當然這種工作流也適合非單頁面應用進行產品功能原型設計。 未經允許,請勿轉載。本文同時也發布在我的博客。 (如果對SPA概念不清楚的同學可以先自行了解相關概念) 平時喜歡做點小頁面來玩玩,并且一直采用單頁面應用(Single Page Appl...

    Codeing_ls 評論0 收藏0
  • Sanic + 前端MVVM 一種新一代Python高性能全棧開發實踐

    摘要:前端一種新一代高性能全棧開發實踐背景本項目將使用配合最簡單的邏輯來展示一個基于的全新一代高性能全棧開發實踐的為什么是對于為何不是等著名框架,或許可能很多人會產生疑惑,本身和非常的相似,而它的出現,不僅是大大改進過去時代性能低下通病,外加配 SanicCRUD-vue Sanic + 前端MVVM 一種新一代Python高性能全棧開發實踐showImg(https://segmentfa...

    Profeel 評論0 收藏0

發表評論

0條評論

moven_j

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<