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运算符的知识大全
Nov 03 PHP
计算php页面运行时间的函数介绍
Jul 01 PHP
php判断GIF图片是否为动画的方法
Sep 04 PHP
PHP往XML中添加节点的方法
Mar 12 PHP
thinkphp多层MVC用法分析
Dec 30 PHP
php 多文件上传的实现实例
Oct 23 PHP
详解在YII2框架中使用UEditor编辑器发布文章
Nov 02 PHP
实例讲解PHP验证邮箱是否合格
Jan 28 PHP
PHP迭代器和生成器用法实例分析
Sep 28 PHP
laravel清除视图缓存的代码
Oct 23 PHP
PHP Swoole异步Redis客户端实现方法示例
Oct 24 PHP
php+ajax实现文件切割上传功能示例
Mar 03 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
菜鸟修复电子管记
2021/03/02 无线电
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
php短址转换实现方法
2015/02/25 PHP
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
使用Python处理BAM的方法
2018/09/28 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
自学python的建议和周期预算
2019/01/30 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
运输服务质量承诺书
2014/03/27 职场文书
手术室护士长竞聘书
2014/03/31 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
整改通知书格式
2015/04/22 职场文书
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS