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 相关文章推荐
提取HTML标签
Oct 09 PHP
资料注册后发信小技巧
Oct 09 PHP
php imagecreatetruecolor 创建高清和透明图片代码小结
May 15 PHP
用Simple Excel导出xls实现方法
Dec 06 PHP
PHP面向对象程序设计之接口用法
Aug 20 PHP
php通过获取头信息判断图片类型的方法
Jun 26 PHP
PHP中Array相关函数简介
Jul 03 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
PHP实现的mysql读写分离操作示例
May 22 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
Jun 04 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 PHP
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
Apr 01 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运算符的知识大全
2011/11/03 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
use jscript with List Proxy Server Information
2007/06/11 Javascript
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
Node.js文件操作详解
2014/08/16 Javascript
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
django之自定义软删除Model的方法
2019/08/14 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
酒店管理毕业生自荐信
2013/10/24 职场文书
电信营业员自我评价分享
2014/01/17 职场文书
世界读书日的活动方案
2014/08/20 职场文书
大学军训自我鉴定大全
2014/09/18 职场文书
体育教师个人工作总结
2015/02/09 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
python实现进度条的多种实现
2021/04/29 Python
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫