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 ; } |