作者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
1F:→ LaPass:同意..... 10/05 14:08
2F:推 mervynW:说真的, 我不爱用ActiveRecord. 很多东西DB可以处理掉 10/05 14:08
3F:推 gname:我都自己刻 active record 来自嗨...XD 避掉一堆问题... 10/05 17:56
4F:推 appleboy46:CI 3.0 没有 Active Record 了 换成 Query Builder 10/06 19:40
5F:→ appleboy46:换名字而已,大家别误会 10/06 19:41