3 回答

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果你不喜歡面對(duì)對(duì)象的語法:
query().from("user") .where( (user.firstName.like("Bob")).or(user.firstName.like("Ann"))) .orderBy(user.firstName.asc()) .list(user);
面向?qū)ο笳Z法:
InsertSQL sql = new InsertSQL();sql.insertInto("students") .value("id", new Integer(id)) .value("name", name) .value("gender", gender);
-----------------------------------
最后贈(zèng)送你一個(gè)我以前用過的DSL
/** * 配置路由規(guī)則 */RouteBuilder builder = new RouteBuilder() { public void configure() { from("/user").filter(header("language").isEqualTo("zh")).to("/zh/user"); from("/user/edit/3").choice() .when(header("foo").isEqualTo("bar")).to("queue:d") .when(header("foo").isEqualTo("cheese")).to("queue:e") .otherwise().to("queue:f"); } };
具有表達(dá)性的代碼是:做什么,而不是怎么做。

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
不知道有多少人做過這種"靈活"拼SQL的東西,我想他們最后都會(huì)發(fā)現(xiàn),SQL太靈活,語言太死板,拼來拼去也不會(huì)讓人滿意。
一個(gè)可行的實(shí)踐是將SQL語句集中起來。實(shí)際上每次去找數(shù)據(jù)庫的SQL語句中變量并不多,完全可以事先寫好SQL語句,分配個(gè)id,簡單包裝一下,在調(diào)用的時(shí)候給出參數(shù)。
這樣做的好處至少有這兩個(gè):
1. 可以保證sql語句經(jīng)過測(cè)試,用上了該用的索引
2. 參數(shù)化查詢可以避免SQL注入攻擊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
針對(duì)SQL而言,建議直接拼SQL或找個(gè)框架吧,比如Yii框架的就支持下面這樣的寫法:(是不是簡單多了呢?)
$rows = (new \yii\db\Query()) ->select(['id', 'email']) ->from('user') ->where(['last_name' => 'Smith']) ->limit(10) ->all();
針對(duì)問題標(biāo)題本身——“php中如何解決函數(shù)參數(shù)列表過長問題”——PHP有個(gè)很強(qiáng)大的array,可以用它來傳參數(shù)呀(變相的命名參數(shù)):
function foo($params){ $params = array_merge(array( 'select' => 'default selector', 'where' => 'default where', // ... ), $params); // do something with $params... }
- 3 回答
- 0 關(guān)注
- 237 瀏覽
添加回答
舉報(bào)