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 相关文章推荐
php $_ENV为空的原因分析
Jun 01 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
Jul 03 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
Oct 27 PHP
PHP 动态生成静态HTML页面示例代码
Jan 15 PHP
PHP中单引号与双引号的区别分析
Aug 19 PHP
PHP邮件发送类PHPMailer用法实例详解
Sep 22 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
Smarty日期时间操作方法示例
Nov 15 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
php字符串过滤strip_tags()函数用法实例分析
Jun 24 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
Jul 26 PHP
Laravel框架下的Contracts契约详解
Mar 17 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 一元分词算法
2009/11/30 PHP
PHP isset()与empty()的使用区别详解
2010/08/29 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
php实现购物车功能(上)
2020/07/23 PHP
php微信开发之百度天气预报
2016/11/18 PHP
Js 随机数产生6位数字
2010/05/13 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
Node.js与Sails redis组件的使用教程
2017/02/14 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
vue二级路由设置方法
2018/02/09 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
layui表格分页 记录勾选的实例
2019/09/02 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
迎接领导欢迎词
2014/01/11 职场文书
《月迹》教学反思
2014/02/19 职场文书
出纳会计岗位职责
2014/03/12 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers
JavaScript中reduce()的用法
2022/05/11 Javascript