PHP將MySQL的查詢結果轉換為數組並用where拼接的樣本_php技巧

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.