php特性與mysqli融合鑄造資料庫插入之劍
自上次新手村外白如意被mysql狠狠教訓,內心一想起資料庫竟有點發怵。只聽信無望山php掌門之意,潛心修鍊內功心法,數日後頓悟原力。
——《編程話江湖,原力鑄神兵》
php5.6引入前置... 操作符,使得函數參數個數具有彈性
mysql4.1引入預處理語句,為執行做好準備,帶來了佔位符?,也能有效防止SQL注入攻擊。現在有一個Student表,在數據中查看錶結構
主鍵為id整型自動+1,其中姓名name 和級別grade為字元串類型。讓我們看看插入語句的寫法
注意,欄位個數增加,相應的參數也在增加,後面將運用這一點
php通過mysqli擴展實現預處理語句,也是執行插入語句
用?進行了預處理語句佔了坑,後面需要綁定相應的數據,並在這之前指明數據類型,php支持提供i、d、s、b四種對應參數類型,這四個類型是從php的角度看待的
當我們需要插入需要增加一個age,上方的代碼必須人為修改
當插入欄位有多少,代碼就會有多長。
很快,白如易從中發現了要害——
白如易悟到,對於任何一張邪惡的mysql數據表,它的表欄位和結構可以認為是不變的。當我們插入數據時,只須數據表已存在欄位相同則切中要害,欄位變則參數變,欄位長則參數長,步調一致,萬變不離其宗。
總體脈絡
第一步,獲取資料庫操作句柄變數
php中的mysqli擴展提供連接資料庫功能,有面向過程和面向對象兩種寫法,更推薦使用面向對象的寫法,變數自定義命名為$mysqli
第二步,創建添加方法
自定義名稱為add。根據輸入數據,從中獲取能夠進入資料庫的有效數據,並且根據有效數據為其組織相應的參數類型列表、和組裝預處理SQL。
其中,$dataArr 數組包含三個元素:
獲取上面三個元素的函數我們命名為filterFromTable()。這個函數肩負起上方所有的職責,首先要獲取資料庫表欄位列表和其i、d、s、b類型,接著循環資料庫列表欄位或插入數據,比對找出其中登記在庫的參數重組數據,並且在循環時可順便拼接 好SQL語句的欄位列表和問號列表
其中,fieldTypeArr()用來獲取資料庫欄位對應i、d、s、b類型,需要根據mysql欄位類型做一個轉換,該函數返回內容為
上述函數根據mysql欄位類型,轉換為i、d、s、b類型用到的自定義函數oneFieldType
第三步,測試
以Student表為例引入myDB.class.php類,將適用於任何錶的插入操作
執行過程的中間返回值
函數調用關係
完整的代碼
包括注釋和輔助函數,共計107行
這就實現了插入操作,其他資料庫操作應該可以舉一反三
一門語言的原力來源於自身,這樣代碼可能會有靈魂
完
少俠有緣再見還請留贊
TAG:編程夜未眠 |