楠Go随笔

构造复杂SQL语句

2017-11-10 18:59:03 admin 阅读 网站首页 > PHP > 开发心得

如果像使用了一些PHP框架比如ThinkPHP在模型层中提供了链式操作,把各种语句拆分出来然后组装的话,我们可以很容易组装好SQL语句。但是如果自己像构造复杂一点的SQL语句需要自己手工拼接,面对复杂的条件设置我们该怎么办了?

SQL语句添加条件查询时 需要用 where 关键字声明。多个条件间可以用 and 或 or拼接起来。那这样的话 我们可以假设 现在有多个条件需要拼接 每个条件之间都用 and 连接起来 如。

<?php
$str = " and name = 'hello' and type='system' and adminid=2 ";
?>

常规做法 我们会判断多个if分支 然后综合各种情况把最终语句拼接起来,但是这种做法不具备可拓展性,试想如果有10个条件,每一个条件随机组合拼接在一起会存在2^10,看到这个数字心都凉了半截。

现在需要定义一个变量 $sql 用来拼接sql语句。

<?php
#条件一 存在 存在就拼接 语句 $sql.=" and 'typeid'={$type}"; #条件二 存在 存在就拼接 语句 $sql.=" and 'admin'={$adminid}"; #条件三 ... #条件四 ... #然后判断字符串sql是否存在 有的话说明这整个过程有条件拼接 if ($sql){     #做字符串替换 把整个字符串中 第一个and 替换成where     $sql = preg_replace('/and/', 'where', $sql, 1); } $sql = "select * from $table {$sql} ";
?>

本来一开始想用str_replace 字符串替换函数去处理 但是很奇怪 我翻遍了手册说是可以替换 而且可以替换指定的次数 但是亲自去尝试了之后发现没效一替换就替换所有,所以只要用正则表示式来替换。

搜索

关于楠Go

2015年毕业于吉林大学珠海学院,现今工作已两年有余,2014年在珠海一家游戏公司从事手机游戏开发,后离职转型为网络端PHP工程师,时至今日。熟练掌握PHP面向对象编程网络编程TP框架使用Discuz论坛插件开发。掌握前端框架Bootstrap的使用,掌握JS框架Jquery的使用。已开发多款网站,有着一定基础的开发经验,希望能在互联网领域再上一层楼!

了解更多: 开源中国 ThinkPHP


Powered by MetInfo 5.3.19 ©2008-2018 www.MetInfo.cn