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函数,php爱好者站推荐
Mar 19 PHP
PHP获取类中常量,属性,及方法列表的方法
Apr 09 PHP
php实现jQuery扩展函数
Oct 30 PHP
PHP中PDO基础教程 入门级
Sep 04 PHP
php中将字符串转为HTML的实体引用的一个类
Feb 03 PHP
php中实现精确设置session过期时间的方法
Jul 17 PHP
Linux下安装PHP MSSQL扩展教程
Oct 24 PHP
PHP实现获取FLV文件的时间
Feb 10 PHP
Thinkphp框架开发移动端接口(2)
Aug 18 PHP
Laravel 类和接口注入相关的代码
Oct 15 PHP
浅谈php常用的7大框架的优缺点
Jul 20 PHP
php慢查询日志和错误日志使用详解
Feb 27 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 数字左侧自动补0
2008/03/31 PHP
PHP获取url的函数代码
2011/08/02 PHP
php文件上传的简单实例
2013/10/19 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
键盘KeyCode值列表汇总
2013/11/26 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
2014/05/11 Javascript
js闭包实例汇总
2014/11/09 Javascript
jQuery EasyUI之DataGrid使用实例详解
2016/01/04 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
JS处理一些简单计算题
2018/02/24 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
Python随机生成彩票号码的方法
2015/03/05 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
python实现Decorator模式实例代码
2018/02/09 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
使用Pycharm分段执行代码
2020/04/15 Python
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
建筑班组长岗位职责
2014/01/02 职场文书
合作经营协议书范本
2014/09/16 职场文书
小学总务工作总结
2015/08/13 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
Java实现贪吃蛇游戏的示例代码
2022/09/23 Java/Android