PHP将MySQL的查询结果转换为数组并用where拼接的示例

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;
}
(0)

相关推荐

  • php mysql procedure实现获取多个结果集的方法【基于thinkPHP】

    本文实例讲述了php mysql procedure实现获取多个结果集的方法.分享给大家供大家参考,具体如下: protected function getRs($id) { $db = new mysqli(C("DB_HOST"), C("DB_USER"), C("DB_PWD"), C("DB_NAME"), C("DB_PORT")); if (mysqli_connect_errno()) th

  • 如何解决PHP使用mysql_query查询超大结果集超内存问题

    再使用mysql_query查询超大结果集的时候会出现超出内存限制的致命错误,这是因为mysql_query采用的是查询全部结果然后把结果集全部缓存到内存中的方式. mysql的查询还提供了另外一种查询方式,函数名为mysql_unbuffered_query,这个函数采用的是查出结果后立即操作结果集,并不会把结果集缓存到内存中,这样就避免了超出内存的情况发生.但是使用这个方法的代价就是不能再查询的时候使用获取总行之类的方法,因为这种方法是便查询边返回结果.同时在使用该方法的时候不能在同一数据库

  • PHP使用mysql_fetch_object从查询结果中获取对象集的方法

    本文实例讲述了PHP使用mysql_fetch_object从查询结果中获取对象集的方法.分享给大家供大家参考.具体分析如下: mysql_fetch_object函数用于,提取结果行从一个MySQL的结果集作为objectiative数组. mysql_fetch_object语法: array mysql_fetch_object (resource $Result_Set) Result_Set句柄返回一个mysql_query查询结果集. 如果执行成功返回包含了所有数据行的object,

  • php 结果集的分页实现代码

    复制代码 代码如下: <?php @mysql_connect("localhost", "root","1981427") //连接数据库服务器 or die("数据库服务器连接失败"); @mysql_select_db("test") //选择数据库mydb or die("数据库不存在或不可用"); $query = @mysql_query("select *

  • PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解

    [PHP Source Code]: 复制代码 代码如下: $dbh = new PDO('sqlsrv:server=连接地址;Database=数据库名', 用户名, 密码);try { $procName = "P_Test_GetMixData"; $stmt = $dbh->prepare("EXEC $procName ?, ?, ?"); $nReturnValue = 0; $strReturnValue = ""; $st

  • php查询mysql数据库并将结果保存到数组的方法

    本文实例讲述了php查询mysql数据库并将结果保存到数组的方法.分享给大家供大家参考.具体分析如下: 这里主要用到了mysql_fetch_assoc函数 mysql_fetch_assoc语法如下: array mysql_fetch_assoc (resource $Result_Set) 范例代码如下: <?php $UserName = 'abc'; $Password = '1234'; $DbHandle = mysql_connect ('localhost', $UserNam

  • php简单解析mysqli查询结果的方法(2种方法)

    本文实例讲述了php简单解析mysqli查询结果的方法.分享给大家供大家参考,具体如下: 可将查询结果放入对象或数组中: 1. 将查询结果放入对象: $sql="select name,brief from cars"; $result=mysqli->query($sql); while($row=$result->fetch_object()) { echo $row->name; echo $row->brief; } 2. 放入数组: $sql=&quo

  • PHP连接MySQL查询结果中文显示乱码解决方法

    我们首先假设数据库中采用的编码为UTF-8这时我们在PHP页面中应当首先添加 复制代码 代码如下: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 此处charset的值utf-8必须与文件保存时的编码类型一样 之后在数据库查询前添加 复制代码 代码如下: mysql_query("set names 'utf8'"); 该行语句的编码值也应当

  • MySql数据库查询结果用表格输出PHP代码示例

    在一般的网站中,我们会通常看到,很多数据库中表的数据在浏览器都是出现在表格中的,一开始让自己感到很神奇,但是仔细想想也不算太复杂,既然可以dql和dml的一般返回,以表格的方式返回应该也不成问题,但是,有一点说明的是,在客户端设计脚本去实现问题是不对的,即便可以实现起来也是非常复杂,所以,只能在服务器的方面去考虑,想想问题解决的方式就有了,即在返回的时候打印表格标签和对应属性和属性值,虽然说这种方式看起来不太合理,但是这也是最为有效的方法.具体的代码如下: <?php //在表格中显示表的数据,

  • PHP将MySQL的查询结果转换为数组并用where拼接的示例

    mysql查询结果转换为PHP数组的几种方法的区别:  $result = mysql_fetch_row():这个函数返回的是数组,数组是以数字作为下标的,你只能通过$result[0],$Result[2]这样的形式来引用. $result = mysql_fetch_assoc():这个函数返回是以字段名为下标的数组,只能通过字段名来引用.$result['field1']. $result = mysql_fetch_array():这个函数返回的是一个混合的数组,既可以通过数字下标来引

  • numpy concatenate数组拼接方法示例介绍

    数组拼接方法一 思路:首先将数组转成列表,然后利用列表的拼接函数append().extend()等进行拼接处理,最后将列表转成数组. 示例1: >>> import numpy as np >>> a=np.array([1,2,5]) >>> b=np.array([10,12,15]) >>> a_list=list(a) >>> b_list=list(b) >>> a_list.exten

  • Mysql将查询结果集转换为JSON数据的实例代码

    Mysql将查询结果集转换为JSON数据 前言学生表学生成绩表查询单个学生各科成绩(转换为对象JSON串并用逗号拼接)将单个学生各科成绩转换为数组JSON串将数组串作为value并设置key两张表联合查询(最终SQL,每个学生各科成绩)最终结果 前言 我们经常会有这样一种需求,一对关联关系表,一对多的关系,使用一条sql语句查询两张表的所有记录,例:一张学生表,一张学生各科成绩表,我们想要用一条SQL查询出每个学生各科成绩: 学生表 CREATE TABLE IF NOT EXISTS `stu

  • JPA如何将查询结果转换为DTO对象

    目录 前言 例子 mysql数据库表 联合查询的需求 sql语句 如何在JPA中映射为DTO对象 例子涉及的部分源代码 前言 JPA支持使用@Query自定义查询,查询的结果需要字节用DTO对象接收,如果使用HQL的查询语句,可以将直接将DTO对象的构造方法传入hql中,直接转为DTO对象:而如果使用native sql查询的方式,只能将返回结果用Object[]对象接收,然后DTO设置对象的构造来接收Object[]里面的参数完成DTO对象的转换. 例子 mysql数据库表 用户表 CREAT

  • thinkphp数据查询和遍历数组实例

    本文实例讲述了thinkphp数据查询和遍历数组的方法.分享给大家供大家参考.具体方法如下: 数据库可以使用DSN方法进行配置: 复制代码 代码如下: 'DB_PREFIX'=>'tp_',  //设置表前缀 'DB_DSN'=>'mysql://root:@localhost:3306/thinkphp',//使用DSN方式配置数据库信息 如果两种方式同时存在,以DSN方式为优先,还有一种简单实用模型的方式. M() 等效为 new Model(); 复制代码 代码如下: $m=M('Use

  • php mysql PDO 查询操作的实例详解

    php mysql PDO 查询操作的实例详解 <?php $dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', ''); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->exec('set names utf8'); /*添加*/ //$sql = "INSERT INTO `user` SET `log

  • PHP实现查询两个数组中不同元素的方法

    本文实例讲述了PHP实现查询两个数组中不同元素的方法.分享给大家供大家参考,具体如下: <?php $a = array( "max_allow_dialogs", "livechat_server_ip", "livechat_service_time", "abort_zh_cn", "abort_zh_tw", "abort_en_usa", "welcome_zh

  • php+mysql数据库查询实例

    本文实例讲述了php+mysql数据库查询的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <?php      //连接数据库的参数      $host = "localhost";      $user = "root";      $pass = "zq19890319";      $db = "phpdev";      //创建一个mysql连接      $connection =

  • PHP实现将MySQL重复ID二维数组重组为三维数组的方法

    本文实例讲述了PHP实现将MySQL重复ID二维数组重组为三维数组的方法.分享给大家供大家参考,具体如下: 应用场景 MYSQL在使用关联查询时,比如 产品表 与 产品图片表关联,一个产品多张产品图片,关联查询结果如下: $arr=[ ['id'=>1,'img'=>'img1'], ['id'=>1,'img'=>'img2'], ['id'=>1,'img'=>'img3'], ['id'=>2,'img'=>'img1'], ['id'=>2,'

随机推荐