亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

API后端框架Godtail3-DB組件

moven_j / 2268人閱讀

摘要:另外使用預(yù)處理語(yǔ)句,能有效預(yù)防注入。調(diào)用方法如下單個(gè)多個(gè)每種數(shù)據(jù)庫(kù)支持的操作和連接方式不一樣,使用抽象類實(shí)現(xiàn)通用功能。例如在抽象類,定義屬性,和,用來(lái)標(biāo)記,每個(gè)支持的和,例如支持,不支持或者說(shuō)實(shí)現(xiàn)的方式不一致。

來(lái)自博客:神的尾巴,原文鏈接

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

使用PDO

基于PDO,PDO提供了一個(gè)數(shù)據(jù)訪問(wèn)抽象層,能夠支持多種數(shù)據(jù)庫(kù)。另外使用預(yù)處理語(yǔ)句,能有效預(yù)防SQL注入。

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

支持多個(gè)數(shù)據(jù)庫(kù)

定義靜態(tài)變量用來(lái)接收配置文件,用來(lái)配置單個(gè)或者多個(gè)數(shù)據(jù)庫(kù)。

#單個(gè)數(shù)據(jù)庫(kù)
return [
    "dbType" => "Mysql",
    "host" => "127.0.0.1",
    "database" => "blog",
    "port" => "3306",
    "user" => "root",
    "password" => "root",
    "charset" => "utf8"
]

#多個(gè)數(shù)據(jù)庫(kù)
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"
    ]
]

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

調(diào)用方法如下:

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

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

每種數(shù)據(jù)庫(kù)支持的操作和連接方式不一樣,使用抽象類Driver實(shí)現(xiàn)通用功能。然后,每種數(shù)據(jù)庫(kù)驅(qū)動(dòng)繼承Driver,負(fù)責(zé)實(shí)現(xiàn)例如連接方式等,不同數(shù)據(jù)庫(kù)的特有功能。在實(shí)例化的時(shí)候,會(huì)根據(jù)配置的dbType,返回每個(gè)db對(duì)于的驅(qū)動(dòng)。

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

我把連貫操作分為兩類:

設(shè)置數(shù)據(jù)的dataOpt。例如:where, field, limit...

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

在抽象類Driver,定義protected屬性,$dataOpt$endOpt,用來(lái)標(biāo)記,每個(gè)db支持的dataOptendOpt,例如Mysql支持limit,SQL Server不支持(或者說(shuō)實(shí)現(xiàn)的方式不一致)。

dataOpt實(shí)現(xiàn)接口DataOpt,提供方法parse,返回?cái)?shù)據(jù)包含,sqlPart用來(lái)拼裝sql,paramssql ?對(duì)應(yīng)的參數(shù)。

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

在調(diào)用的時(shí)候,使用Driver的魔法方法__call,如果是dataOpt,設(shè)置數(shù)據(jù)到$data變量,如果是endOpt,根據(jù)endOpt設(shè)置的執(zhí)行順序,執(zhí)行對(duì)于數(shù)據(jù)的解析。

判斷是否有endOptAfter方法或endOptBefore,依次調(diào)用(后面打算使用Hook實(shí)現(xiàn))。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/22009.html

相關(guān)文章

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

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

    summerpxy 評(píng)論0 收藏0
  • EggBorn.js:一款頂級(jí)Javascript全棧開發(fā)框架

    摘要:是什么是一款頂級(jí)全棧開發(fā)框架。漸進(jìn)式開發(fā)由于模塊的高度內(nèi)聚,可以將業(yè)務(wù)以模塊的形式沉淀,在多個(gè)項(xiàng)目中重復(fù)使用,既可貢獻(xiàn)到開源社區(qū),也可部署到公司內(nèi)部私有倉(cāng)庫(kù)。模塊發(fā)布當(dāng)項(xiàng)目中的模塊代碼穩(wěn)定后,可以將模塊公開發(fā)布,貢獻(xiàn)到開源社區(qū)。 EggBorn.js是什么 EggBorn.js是一款頂級(jí)Javascript全棧開發(fā)框架。 EggBorn.js是采用Javascript進(jìn)行全棧開發(fā)的最佳...

    dayday_up 評(píng)論0 收藏0
  • 構(gòu)建前端項(xiàng)目

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

    mindwind 評(píng)論0 收藏0
  • 一種SPA(單頁(yè)面應(yīng)用)架構(gòu)

    摘要:個(gè)人認(rèn)為單頁(yè)面應(yīng)用的優(yōu)勢(shì)相當(dāng)明顯前后端職責(zé)分離,架構(gòu)清晰前端進(jìn)行交互邏輯,后端負(fù)責(zé)數(shù)據(jù)處理。上面的這種單頁(yè)面應(yīng)用也有其相應(yīng)的一種開發(fā)工作流,當(dāng)然這種工作流也適合非單頁(yè)面應(yīng)用進(jìn)行產(chǎn)品功能原型設(shè)計(jì)。 未經(jīng)允許,請(qǐng)勿轉(zhuǎn)載。本文同時(shí)也發(fā)布在我的博客。 (如果對(duì)SPA概念不清楚的同學(xué)可以先自行了解相關(guān)概念) 平時(shí)喜歡做點(diǎn)小頁(yè)面來(lái)玩玩,并且一直采用單頁(yè)面應(yīng)用(Single Page Appl...

    Codeing_ls 評(píng)論0 收藏0
  • Sanic + 前端MVVM 一種新一代Python高性能全棧開發(fā)實(shí)踐

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

    Profeel 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

moven_j

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<