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 19 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
CentOS下PHP安装Oracle扩展
Feb 15 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
php关键字仅替换一次的实现函数
Oct 29 PHP
PHP扩展框架之Yaf框架的安装与使用
May 18 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
Nov 14 PHP
Zend Framework路由器用法实例详解
Dec 11 PHP
thinkPHP5.0框架命名空间详解
Mar 18 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
Jul 20 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中生成随机密码的自定义函数代码
2013/10/21 PHP
php实现读取内存顺序号
2015/03/29 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
Jquery getJSON方法详细分析
2013/12/26 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
详解Document.Cookie
2015/12/25 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
python不换行之end=与逗号的意思及用途
2017/11/21 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
python tornado微信开发入门代码
2018/08/24 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
Python调用.NET库的方法步骤
2019/12/27 Python
python3爬取torrent种子链接实例
2020/01/16 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
教师节座谈会主持词
2015/07/03 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
Mysql忘记密码解决方法
2022/02/12 MySQL
解决 redis 无法远程连接
2022/05/15 Redis