看板 PHP 關於我們 聯絡資訊
※ 引述《LaPass (LaPass)》之銘言: : 想到另一種狀況 : 也是讓我很頭痛的.... : 就是,SERVER跟資料庫連接的話,總是有很高的機率出現這種東西 : $Sql=" SELECT * FROM USER WHERE (1=1) "; : if(條件1) : { : $Sql.=" AND CLASS IN (".$SomeClass.") "; : } : if(條件2) : { : $Sql.=" AND TECHER IN (".$SomeOne.") "; : } : ........... : if裡面可能會有更多的判斷式 : 或是用while for組合出其他SQL命令的判斷式 : 甚至可能會使用union結合其他table的狀況 : 請問有方法讓這種狀況乾淨一點嗎? 本來想用推文繼續但我想用回文好了。(推文不合適貼CODE) $Sql=" SELECT * FROM USER WHERE (1=1) "; $Sql .= dbWhere('條件1','CLASS',$SomeClass); $Sql .= dbWhere('條件2','TEACHER',$SomeOne); function dbWhere($bool,$field,$value){ $sql = false; if($bool === true){ $sql = " AND {$field} IN ($value)"; } return $sql; } 上面只是一個例子。 假如說你的sql字串本身就是一群複雜的條件的確不易處理。 唯一能做的就是把這一群處理另案放在函式中判斷。 而不是用在主程式使用。 通常主程式還是維繫他乾淨的流程就好。 本來在資料庫串聯語法這件事就有很多吃力不討好的工作。 像ci也是,他是提供基本的active record。 一般的工作來說是可以滿足。 但有的時候就偏偏需要子查詢,或是特殊的資料排列在取出。 往往遇到這種的我就只能用$this->db->query()自己硬幹sql語句。 sql......真是讓人又愛又恨。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.156.119
LaPass:同意..... 10/05 14:08
mervynW:說真的, 我不愛用ActiveRecord. 很多東西DB可以處理掉 10/05 14:08
gname:我都自己刻 active record 來自嗨...XD 避掉一堆問題... 10/05 17:56
appleboy46:CI 3.0 沒有 Active Record 了 換成 Query Builder 10/06 19:40
appleboy46:換名字而已,大家別誤會 10/06 19:41