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 相关文章推荐
smarty巧妙处理iframe中内容页的代码
Mar 07 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
Jun 26 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
Jul 01 PHP
php 生成自动创建文件夹并上传文件的示例代码
Mar 07 PHP
php绘制一条弧线的方法
Jan 24 PHP
php简单分页类实现方法
Feb 26 PHP
WHOOPS PHP调试库的使用
Sep 29 PHP
Smarty模板类内部原理实例分析
Jul 03 PHP
PHP INT类型在内存中占字节详解
Jul 20 PHP
laravel 时间格式转时间戳的例子
Oct 11 PHP
关于laravel框架中的常用目录路径函数
Oct 23 PHP
php解析非标准json、非规范json的方式实例
May 10 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
adodb与adodb_lite之比较
2006/12/31 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
2018/10/12 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
2020/07/17 Javascript
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
教你用Python写安卓游戏外挂
2018/01/11 Python
python中logging包的使用总结
2018/02/28 Python
通过python3实现投票功能代码实例
2019/09/26 Python
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
中专生的个人自我评价
2013/12/11 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
授权委托书(完整版)
2014/09/10 职场文书
庆六一宣传标语
2014/10/08 职场文书
离婚协议书样本
2015/01/26 职场文书
销售内勤岗位职责
2015/02/10 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
python实现自动清理文件夹旧文件
2021/05/10 Python