php中实现用数组妩媚地生成要执行的sql语句


Posted in PHP onJuly 10, 2015

 会不会碰到这样一种情况呢?每次获取数据将数据和历史版本都有一定的差别,然而用ThinkPHP的addAll()函数,却会将已有的数据删掉再重新写入。这明显不是我们想要的。但自己写sql每次几十个字段也是醉了。如何优雅而又轻松地实现sql的自动生成呢?于是有了下面这个方法。

/**
   * [array_to_sql 根据数组key和value拼接成需要的sql]
   * @param [type] $array  [key, value结构数组]
   * @param string $type  [sql类型insert,update]
   * @param array $exclude [排除的字段]
   * @return [string]     [返回拼接好的sql]
   */
  function array_to_sql($array, $type='insert', $exclude = array()){
    
    $sql = '';
    if(count($array) > 0){
      foreach ($exclude as $exkey) {
        unset($array[$exkey]);//剔除不要的key
      }

      if('insert' == $type){
        $keys = array_keys($array);
        $values = array_values($array);
        $col = implode("`, `", $keys);
        $val = implode("', '", $values);
        $sql = "(`$col`) values('$val')";
      }else if('update' == $type){
        $tempsql = '';
        $temparr = array();
        foreach ($array as $key => $value) {
          $tempsql = "'$key' = '$value'";
          $temparr[] = $tempsql;
        }

        $sql = implode(",", $temparr);
      }
    }
    return $sql;
  }

当然,这个方法还有很多可以斟酌的地方。能用,但不是最好的。园子的猿猿们你们有更好的方法吗?请告诉我吧!

PHP 相关文章推荐
PHP以及MYSQL日期比较方法
Nov 29 PHP
记录mysql性能查询过程的使用方法
May 02 PHP
php实现图形显示Ip地址的代码及注释
Jan 20 PHP
PHP中数据类型转换的三种方式
Apr 02 PHP
PHP Reflection API详解
May 12 PHP
Yii2使用表单上传文件的实例代码
Aug 03 PHP
php实现多站点共用session实现单点登录的方法详解
Sep 18 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 PHP
PHP的imageTtfText()函数深入详解
Mar 03 PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 #PHP
codeigniter实现get分页的方法
Jul 10 #PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
Jul 10 #PHP
php基于Snoopy解析网页html的方法
Jul 09 #PHP
php生成固定长度纯数字编码的方法
Jul 09 #PHP
php随机获取金山词霸每日一句的方法
Jul 09 #PHP
PHP实现的QQ空间g_tk加密算法
Jul 09 #PHP
You might like
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
Windows 系统下安装和部署Egret的开发环境
2014/07/31 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
微信小程序在ios下Echarts图表不能滑动的问题解决
2019/07/10 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
js实现简单的倒计时
2021/01/28 Javascript
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
[01:18]PWL开团时刻DAY10——一拳超人
2020/11/11 DOTA
python日志记录模块实例及改进
2017/02/12 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
python之消除前缀重命名的方法
2018/10/21 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
Python numpy线性代数用法实例解析
2019/11/15 Python
keras.layer.input()用法说明
2020/06/16 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
出纳岗位职责模板
2013/11/27 职场文书
校本教研工作制度
2014/01/22 职场文书
回门宴父母答谢词
2014/01/26 职场文书
财务总经理岗位职责
2014/02/16 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
基于Go语言构建RESTful API服务
2021/07/25 Golang