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在服务器执行exec命令失败的解决方法
Mar 03 PHP
PHP 第二节 数据类型之转换
Apr 28 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
Jul 02 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
Jul 03 PHP
php Session存储到Redis的方法
Nov 04 PHP
php把session写入数据库示例
Feb 26 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
May 10 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
php禁止浏览器使用缓存页面的方法
Nov 07 PHP
php下载远程大文件(获取远程文件大小)的实例
Jun 17 PHP
laravel通过a标签从视图向控制器实现传值
Oct 15 PHP
php+iframe 实现上传文件功能示例
Mar 04 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+xml编程之SimpleXML的应用实例
2015/01/24 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
简单谈谈axios中的get,post方法
2017/06/25 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
Python入门篇之对象类型
2014/10/17 Python
python选择排序算法实例总结
2015/07/01 Python
Python中音频处理库pydub的使用教程
2017/06/07 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
详解Python if-elif-else知识点
2018/06/11 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
python爬取招聘要求等信息实例
2020/11/20 Python
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
物业招聘计划书
2014/01/10 职场文书
临床护士自荐信
2014/01/31 职场文书
《社戏》教学反思
2014/04/15 职场文书
2019个人工作总结
2019/06/21 职场文书
如何优化vue打包文件过大
2022/04/13 Vue.js
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers