摘要:另外使用預處理語句,能有效預防注入。調用方法如下單個多個每種數據庫支持的操作和連接方式不一樣,使用抽象類實現通用功能。例如在抽象類,定義屬性,和,用來標記,每個支持的和,例如支持,不支持或者說實現的方式不一致。
來自博客:神的尾巴,原文鏈接
已經提交到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_PREPARES為true,否則會在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支持的dataOpt和endOpt,例如Mysql支持limit,SQL Server不支持(或者說實現的方式不一致)。
dataOpt實現接口DataOpt,提供方法parse,返回數據包含,sqlPart用來拼裝sql,params是sql ?對應的參數。
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
摘要:另外這個框架作為后端純框架。當前博客就是用這個組件寫的,代碼也在上。還需完善的一些地方近幾天抽空解決下自定義路由添加正則匹配。的格式換行數據內容換行數據內容最后一個目前是通過正則來解析處理的,如果設置了。使用生成臨時文件。 來自博客:神的尾巴,原文鏈接 已提交到github,路由組件代碼,代碼質量一般,大家將就著看 : ) 組件思路 現在都是單入口,通過index.php配置組件,然后...
摘要:是什么是一款頂級全棧開發框架。漸進式開發由于模塊的高度內聚,可以將業務以模塊的形式沉淀,在多個項目中重復使用,既可貢獻到開源社區,也可部署到公司內部私有倉庫。模塊發布當項目中的模塊代碼穩定后,可以將模塊公開發布,貢獻到開源社區。 EggBorn.js是什么 EggBorn.js是一款頂級Javascript全棧開發框架。 EggBorn.js是采用Javascript進行全棧開發的最佳...
摘要:個人認為單頁面應用的優勢相當明顯前后端職責分離,架構清晰前端進行交互邏輯,后端負責數據處理。上面的這種單頁面應用也有其相應的一種開發工作流,當然這種工作流也適合非單頁面應用進行產品功能原型設計。 未經允許,請勿轉載。本文同時也發布在我的博客。 (如果對SPA概念不清楚的同學可以先自行了解相關概念) 平時喜歡做點小頁面來玩玩,并且一直采用單頁面應用(Single Page Appl...
摘要:前端一種新一代高性能全棧開發實踐背景本項目將使用配合最簡單的邏輯來展示一個基于的全新一代高性能全棧開發實踐的為什么是對于為何不是等著名框架,或許可能很多人會產生疑惑,本身和非常的相似,而它的出現,不僅是大大改進過去時代性能低下通病,外加配 SanicCRUD-vue Sanic + 前端MVVM 一種新一代Python高性能全棧開發實踐showImg(https://segmentfa...
閱讀 1269·2021-09-23 11:51
閱讀 1386·2021-09-04 16:45
閱讀 630·2019-08-30 15:54
閱讀 2081·2019-08-30 15:52
閱讀 1599·2019-08-30 11:17
閱讀 3104·2019-08-29 13:59
閱讀 2014·2019-08-28 18:09
閱讀 386·2019-08-26 12:15