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--用万网的接口实现域名查询功能
Dec 13 PHP
php对二维数组按指定键值key排序示例代码
Nov 26 PHP
php获取网页标题和内容函数(不包含html标签)
Feb 03 PHP
php顺序查找和二分查找示例
Mar 27 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
Jun 26 PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
Oct 30 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
Jan 28 PHP
php实现购物车功能(下)
Jan 05 PHP
注释PHP和html混合代码的小技巧(分享)
Nov 03 PHP
php实现推荐功能的简单实例
Sep 29 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 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
Zend Studio 实用快捷键一览表(精心整理)
2013/08/10 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
php中文繁体和简体相互转换的方法
2015/03/21 PHP
php实现对象克隆的方法
2015/06/20 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
PHP标准库(PHP SPL)详解
2019/03/16 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
实用的Vue开发技巧
2019/05/30 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
pycharm远程调试openstack的图文教程
2017/11/21 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
python爬虫刷访问量 2019 7月
2019/08/01 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
python requests库的使用
2021/01/06 Python
python压包的概念及实例详解
2021/02/17 Python
药剂专业个人求职信范文
2014/04/29 职场文书
教师个人读书活动总结
2014/07/08 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
小学班级特色活动方案
2014/08/31 职场文书
公司业务员管理制度
2015/08/05 职场文书
MySQL慢查询优化解决问题
2022/03/17 MySQL