來源:互聯網
上載者:User
關鍵字
php
curd
oop
mysql
資料庫開發
PHP使用pdo_mysql/mysqli的預先處理(prepare)方法,已經封裝成類,使用數組的方式把參數綁定再執行。
但是資料表比較多時,如果把每個資料表的CURD操作都寫成獨立的函數就太麻煩了,那樣的話檔案也多,以後維護不方便。
如果把CURD封裝成類,就可以方便使用了,比如擷取使用者表、文章表的資料,傳入表名、資料和其他查詢參數再執行即可。
但是這樣不僅沒有了靈活性,而且因為是prepare方式執行的,這樣就要用很多"?"來代替參數然後再綁定,反而不知應該怎樣寫了(主要是select語句)。
比如擷取使用者表的10個註冊使用者:
非prepare方式:
SELECT `username` FROM `users` WHERE `type` = 1 LIMIT 0, 10
如果要把LIMIT換成其他子句,比如ORDER BY這些,直接拼接SQL語句就行了,沒有難度。
但是,下面這種就麻煩了。
prepare方式:
SELECT `?` FROM `?` WHERE `?` = ? LIMIT ?, ?array('username', 'users', 'type', 1, 0, 10)
但是在有些情況下可能就不需要LIMIT。
這樣的話組織CURD的代碼會很麻煩,如果包括子句,比如WORDER BY這些,將會更麻煩。
有沒有簡便或者折中的方法?
補充:我已用ORM解決。
回複內容:
PHP使用pdo_mysql/mysqli的預先處理(prepare)方法,已經封裝成類,使用數組的方式把參數綁定再執行。
但是資料表比較多時,如果把每個資料表的CURD操作都寫成獨立的函數就太麻煩了,那樣的話檔案也多,以後維護不方便。
如果把CURD封裝成類,就可以方便使用了,比如擷取使用者表、文章表的資料,傳入表名、資料和其他查詢參數再執行即可。
但是這樣不僅沒有了靈活性,而且因為是prepare方式執行的,這樣就要用很多"?"來代替參數然後再綁定,反而不知應該怎樣寫了(主要是select語句)。
比如擷取使用者表的10個註冊使用者:
非prepare方式:
SELECT `username` FROM `users` WHERE `type` = 1 LIMIT 0, 10
如果要把LIMIT換成其他子句,比如ORDER BY這些,直接拼接SQL語句就行了,沒有難度。
但是,下面這種就麻煩了。
prepare方式:
SELECT `?` FROM `?` WHERE `?` = ? LIMIT ?, ?array('username', 'users', 'type', 1, 0, 10)
但是在有些情況下可能就不需要LIMIT。
這樣的話組織CURD的代碼會很麻煩,如果包括子句,比如WORDER BY這些,將會更麻煩。
有沒有簡便或者折中的方法?
補充:我已用ORM解決。
SELECT `username` FROM `users` WHERE `type` = ? LIMIT 0, 10array(1)像上面一樣 只設定關鍵字段就行了
curd用單例做抽象封裝,具體到表的資料庫操作封裝成model層,就是mvc的m