2016-06-29 1 views
0

약 1 주일간 검색 한 결과 나는 결정적/효율적/최대 날짜/표준 방법을 찾지 못하는 것 같습니다.동급 솔루션에서 클래스 정의 명령

명백한 해결책은 쿼리를 실행하여 결과를 변수로 가져오고 다음 쿼리를 준비 할 때까지 정리하는 것입니다. 연결을 종료하지 않는 것이 효율적입니다.

이것은 select/update/insert가있는 래퍼 클래스에서 수행됩니다.이 래퍼 클래스는 차례로 mysqli multi_query()에 대한 쿼리를 호출하므로 이상적으로 쿼리/이전에 어떤 일이 발생했는지 걱정하지 않고 쿼리가 실행되는지 확인합니다. 일부 솔루션에서 결과 세트가 필요하기 때문에 가능하지 않습니다.

현재 선택/업데이트/삽입 호출 : 결과 집합을 처리 후

private function queryclearup($dataresource) { 
     //clear up if required 
     switch ($this->dbtype) { 
      case "mysqli": 
        @mysqli_next_result($this->connection); 
        @mysqli_free_result($dataresource); //clear result to avoid out of sync issues 
        break; 
     } 
} 

- 예를 선택하는 경우의 데이터 배열로 변환하거나 업데이트의 경우에 오류를 로깅/insert.

여전히이 문제는 일부 (업데이트)에서는 유지되지만 다른 부분에서는 나타나지 않습니다 (선택/삽입).

public function select($query, $args = array()) { 
     $this->loghelper->write("SQL Select\n" . $query); 
     $args = _PHP::array_defaults($args, array(
           "pk" => null 
     )); 
     $data_table = array(); 
     $errors = null; 
     $query = utf8_decode($query); 
     switch ($this->dbtype) { 
      case "mysqli": 
        $dbdata = $this->query($query); 
        $data_table = $this->resourceToDataTable($dbdata, $args); 
        break; 
     } 
     return $data_table; 
} 

그런 다음

private function resourceToDataTable($dataresource, $args = array()) { 
      $data_table = array(); 
      if (gettype($dataresource) == "resource" || gettype($dataresource) == "object") { 
       do { 
         switch ($this->dbtype) { 
          case "mysqli": 
            $row = $dataresource->fetch_assoc(); 
            break; 
         } 
         if ($row) { 
          array_push($data_table, $row); 
         } 
       } while ($row); 
       if (!empty($args["pk"])) { 
         $pktable = array(); 
         foreach ($data_table as $d) { 
          if (!array_key_exists($args["pk"], $pktable)) { 
            $pktable[$d[$args["pk"]]] = $d; 
          } 
         } 
         $data_table = $pktable; 
       } 
      } 
      $this->queryclearup($dataresource); 
      return $data_table; 
    } 
+0

필요 뭐죠 것으로 보인다. 다른 사람이 있다면 어떨까요? –

+0

그들은 선택을했다면 이미 루핑되었지만 다른 것은 부울 이어야만합니까? – Datadimension

답변

0

이렇게하면 다음 결과 만 이동

private function queryclearup($dataresource) { 
    //clear up if required 
    switch ($this->db["contype"]) { 
     case "mysqli": 
     while ($dump = @mysqli_next_result($this->connection)) { 
      $donothing = 1; 
     } 
     @mysqli_free_result($dataresource); //clear result to avoid out of sync issues 
     break; 
    } 
    }