作者tkdmaf (皮皮快跑)
看板PHP
標題Re: [討論] PHP、HTML、css的切割
時間Fri Oct 5 14:05:58 2012
※ 引述《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