您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

求一个 sql 拼接的问题 ??

2024/3/28 1:54:57发布13次查看
sql 拼接问题 ?
需求:根据省份,客户名称,通气时间这3个条件去排序,可以只选择一个,也可多个,这3个排序条件都是复选框,
sql 如下:
$mysql->query(select * from customer cu  .$where);
排序条件:
省份
客户名称
通气时间
在 sql 后面拼接的排序条件
if($sel_key10){
$where=$where. order by cu.province ;  // 省
}
if($sel_key11){
$where .=  ,cu.kfname;  // 客户名称
}
if($sel_key12){
$where .=  ,cu.givegastime ;  // 通气时间 
}
我这样拼接的是有问题的,如果 单独以省作为排序条件是没有问题的,但是我单独以其他的作为条件,就不对了,如果我同时以2个,或3个,按照,省,客户名称,通气时间,这样的顺序也是对的,
其实我要的sql 就是 :
select * from customer cu where 1=1 order by cu.province,cu.kfname,cu.givegastime ,如果没有条件就不要 order by ,有就在 括号里面追加。。
排序条件:省份 客户名称 通气时间
回复讨论(解决方案) 可以这么写
$where = array();if($sel_key10){$where[] = cu.province ; // 省}if($sel_key11){$where[] = cu.kfname; // 客户名称}if($sel_key12){$where[] = cu.givegastime ; // 通气时间 }$mysql->query(select * from customer cu . (!empty($where) ? 'order by '. implode(',',$where) : '');
测试代码 省份客户名称通气时间 'cu.province', // 省 'sel_key11' => 'cu.kfname', // 客户名称 'sel_key12' => 'cu.givegastime', // 通气时间 );$sql = select * from customer cu ;if($_post) { $t = array_intersect_key($dict, $_post); if($t) $sql .= 'order by ' . join(', ', $t);}echo $sql;
如果改造一下表单,处理起来更简单 省份客户名称通气时间
如果改造一下表单,处理起来更简单 省份客户名称通气时间
容易产生sql注入漏洞, 慎用
#1 ,#2 ,的方法都没成功, #3 版主的方法成功了。谢谢。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product