PHP将MySQL的查询结果转换为数组并用where拼接的示例


Posted in PHP onMay 13, 2016

mysql查询结果转换为PHP数组的几种方法的区别: 

  • $result = mysql_fetch_row():这个函数返回的是数组,数组是以数字作为下标的,你只能通过$result[0],$Result[2]这样的形式来引用。
  • $result = mysql_fetch_assoc():这个函数返回是以字段名为下标的数组,只能通过字段名来引用。$result['field1'].
  • $result = mysql_fetch_array():这个函数返回的是一个混合的数组,既可以通过数字下标来引用,也可以通过字段名来引用。$result[0]或者$result["field1"].
  • $result = mysql_fetch_object():以对象的形式返回结果,可以通过$result->field1这样的形式来引用。

建议使用mysql_fetch_assoc()或者mysql_fetch_array,这两个函数执行速度比较快,同时也可以通过字段名进行引用,比较清楚。 

where拼接技巧
将where语句从分支移到主干,解决where在分支上的多种情况,分支条件只需and 连接即可如where1==1等

$sql="SELECT * FROM bb where true ";

因为使用添加了“1=1”的过滤条件以后数据库系统就无法使用索引等查询优化策略,数据库系统将会被迫对每行数据进行扫描(也就是全表扫描)以比较此行是否满足过滤条件,当表中数据量比较大的时候查询速度会非常慢。优化方法
test.html

<td>商品名称:</td> 
<td width="200"><input type="text" class="text" name="kit_name" id="fn_kit_name"/></td> 
<td align="right">备案开始日期:</td> 
<td width="200"><input type="text" name="search[or_get_reg_date]"/><img src="images/data.jpg" /></td> 
<td>备案结束日期:</td> 
<td width="200"><input type="text" name="search[lt_reg_date]"/><img src="images/data.jpg" /></td> 
</tr> 
<tr> 
  <td>产品经理:</td> 
  <td><input type="text" class="text" name="search[managerid]"/></td> 

<?php 
$postData = array( 
  'managerid' => '21', 
  'or_get_reg_date' => '09', 
  'lt_reg_date' => '2012-12-19', 
  'in_id' => array(1, 2, 3), 
); 
$tmpConditions = transArrayTerms($postData); 
echo $whereCause = getWhereSql($tmpConditions); 
// WHERE managerid like '21%' OR reg_date<'09' AND reg_date>'2012-12-19' AND id in ('1','2','3')

处理where条件的sql

<?php 
/** 
 * 表单提交值转化成where拼接数组 
 */ 
function transArrayTerms($infoSearch) { 
  $aryRst = array(); 
  $separator = array('lt'=>'<', 'let'=>'<=', 'gt'=>'>', 'get'=>'>=', 'eq'=>'=', 'neq'=>'<>'); 
  foreach ($infoSearch as $term => $value) { 
    if (empty($value)) continue; 
 
    $name = $term; 
    if (strpos($term, "or_") !== false) { //添加or连接符 
      $terms['useOr'] = true; 
      $name = str_replace("or_", "", $term); 
    } 
 
    if (strpos($name, "in_") !== false) { 
      $terms['name'] = str_replace("in_", "", $name); 
      $terms['charCal'] = " in "; 
      $terms['value'] = "('" . implode("','", $value) . "')"; 
    } else { 
      $terms['name'] = $name; 
      $terms['charCal'] = " like "; 
      $terms['value'] = "'" . trim($value) . "%'"; 
    } 
    //放在else后面 
    foreach($separator as $charCalName =>$charCalVal){ 
      if (strpos($name, $charCalName."_") !== false) { 
        $terms['name'] = str_replace($charCalName."_", "", $name); 
        $terms['charCal'] = $charCalVal; 
        $terms['value'] = "'" . trim($value) . "'"; 
      } 
    } 
    $aryRst[] = $terms; 
    unset($terms); 
  } 
  return $aryRst; 
} 
 
function whereOperator($has_where, $useOr) { 
  $operator = $has_where ? ($useOr === false ? ' AND ' : ' OR ') : ' WHERE '; 
  return $operator; 
} 
 
/** 
 * aryTerm transArrayTerms转化后的查询条件 
 * @过滤没有输入的sql查询条件并转化成where条件. 
 */ 
function getWhereSql($aryTerm) { 
  $whereCause = ''; 
  if (count($aryTerm) > 0) { 
    $has_where = ''; 
    foreach ($aryTerm as $value) { 
      $has_where = whereOperator($has_where, isset($value['useOr'])); 
      $whereCause .= $has_where . $value['name'] . $value['charCal'] . $value['value']; 
    } 
  } 
  return $whereCause; 
}
PHP 相关文章推荐
使用sockets:从新闻组中获取文章(二)
Oct 09 PHP
如何在PHP中使用Oracle数据库(2)
Oct 09 PHP
smarty 原来也不过如此~~呵呵
Nov 25 PHP
使用php重新实现PHP脚本引擎内置函数
Mar 06 PHP
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
Mar 16 PHP
PHP 定界符 使用技巧
Jun 14 PHP
php面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
Oct 16 PHP
php array_merge_recursive 数组合并
Oct 26 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
Nov 20 PHP
thinkPHP5.0框架URL访问方法详解
Mar 18 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
php仿微信红包分配算法的实现方法
May 13 #PHP
PHP简单实现无限级分类的方法
May 13 #PHP
PHP生成可点击刷新的验证码简单示例
May 13 #PHP
关于PHP文件的自动运行方法分析
May 13 #PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
May 13 #PHP
PHP中PDO连接数据库中各种DNS设置方法小结
May 13 #PHP
CodeIgniter 完美解决URL含有中文字符串
May 13 #PHP
You might like
php trim 去除空字符的定义与语法介绍
2010/05/31 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
js实现分割上传大文件
2016/03/09 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
使用jquery获取url及url参数的简单实例
2016/06/14 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
2018/12/21 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
Python3学习urllib的使用方法示例
2017/11/29 Python
python+pandas分析nginx日志的实例
2018/04/28 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
SQL Server笔试题
2012/01/10 面试题
电子商务专业应届生求职信
2014/05/28 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
2015小学音乐教师个人工作总结
2015/07/21 职场文书
导游词之贵州百里杜鹃
2019/10/29 职场文书
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python