PHP 는 MySQL 의 검색 결 과 를 배열 로 변환 하고 where 로 연결 하 는 예제 입 니 다.

my sql 조회 결 과 를 PHP 배열 로 바 꾸 는 몇 가지 방법의 차이 점: 
  • $result = mysql_fetch_row():이 함 수 는 배열 로 되 돌아 갑 니 다.배열 은 숫자 로 표 시 됩 니 다.$result[0],$Result[2]와 같은 형식 으로 만 참조 할 수 있 습 니 다.
  • $result = mysql_fetch_assoc():이 함 수 는 필드 이름 을 아래 표 시 된 배열 로 되 돌려 줍 니 다.필드 이름 으로 만 참조 할 수 있 습 니 다.$result['field1'].
  • $result = mysql_fetch_array():이 함 수 는 혼합 배열 을 되 돌려 줍 니 다.숫자 아래 표 시 를 통 해 참조 할 수도 있 고 필드 이름 으로 참조 할 수도 있 습 니 다.$result[0]또는$result["field 1"].
  • $result = mysql_fetch_object():대상 의 형식 으로 결 과 를 되 돌려 줍 니 다.$result->field 1 과 같은 형식 으로 참조 할 수 있 습 니 다.
  • mysql 사용 권장fetch_assoc()또는 mysqlfetch_array,이 두 함수 의 실행 속도 가 비교적 빠 르 고 필드 이름 을 통 해 참조 할 수 있 으 며 비교적 명확 합 니 다. 
    where 맞 춤 법
    where 문 구 를 분기 에서 주간 으로 옮 기 고 where 가 분기 에 있 는 여러 가지 상황 을 해결 합 니 다.분기 조건 은 and 연결 만 하면 where 1=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; 
    } 
    

    좋은 웹페이지 즐겨찾기