第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

每次調(diào)用函數(shù)前又都要構(gòu)造對(duì)象,也挺麻煩,感覺用起來不自然。有什么好的方法解決嗎?

每次調(diào)用函數(shù)前又都要構(gòu)造對(duì)象,也挺麻煩,感覺用起來不自然。有什么好的方法解決嗎?

想寫個(gè)靈活拼接sql語句的函數(shù),把select,from,where,group by,order by,limit這些都作為參數(shù)傳遞。但是如果每一個(gè)都作為獨(dú)立的參數(shù)傳遞,調(diào)用函數(shù)的時(shí)候,就會(huì)受到參數(shù)順序的限制,簡單的sql也可能寫好幾個(gè)無用空參數(shù)。如果要是通過構(gòu)造一個(gè)對(duì)象來傳遞所有參數(shù),參數(shù)列表短了,也不受順序限制了,但是每次調(diào)用函數(shù)前又都要構(gòu)造對(duì)象,也挺麻煩,感覺用起來不自然。有什么好的方法解決嗎?
查看完整描述

3 回答

?
慕姐4208626

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á)性的代碼是:做什么,而不是怎么做。


查看完整回答
反對(duì) 回復(fù) 2023-04-20
?
炎炎設(shè)計(jì)

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注入攻擊


查看完整回答
反對(duì) 回復(fù) 2023-04-20
?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

  1. 針對(duì)SQL而言,建議直接拼SQL或找個(gè)框架吧,比如Yii框架的就支持下面這樣的寫法:(是不是簡單多了呢?)

$rows = (new \yii\db\Query())
    ->select(['id', 'email'])
    ->from('user')
    ->where(['last_name' => 'Smith'])
    ->limit(10)
    ->all();
  1. 針對(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...

}


查看完整回答
反對(duì) 回復(fù) 2023-04-20
  • 3 回答
  • 0 關(guān)注
  • 237 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)