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等
1
|
$sql= "SELECT * FROM bb where true " ;
|
因为使用添加了“1=1”的过滤条件以后数据库系统就无法使用索引等查询优化策略,数据库系统将会*对每行数据进行扫描(也就是全表扫描)以比较此行是否满足过滤条件,当表中数据量比较大的时候查询速度会非常慢。优化方法
test.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
<?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 ;
}
|