2013-05-20 4 views
-1

PDO 기능으로 변환하기 위해 일부 원시 mysql 함수를 다시 작성하려고합니다. 그러나 성능에 엄청난 영향을 주었고 보통의 쿼리는 페이지에 데이터를로드하는 데 0.14 초에서 2.8 초가 걸렸습니다. 이것은 원래의 SQL 쿼리로 서버 한 개가 한 줄에 하나의 정보를 검색하는 공통 기능입니다. 페이지가 약 100 개의 행을 생성하고 있습니다.PDO 대 MySQL 함수

protected function query_s($table, $col, $where_col , $where, $return_col) 
{ 
    $SQL = "SELECT $col FROM ".$table." WHERE $where_col='".$where."' LIMIT 1"; 
    try 
    { 
     if(!mysql_query($SQL)) 
     { 
      throw new Exception("MySQL error: ". mysql_error()); 
     } 
     else 
     { 
      $data = mysql_fetch_array($SQL); 
      return $data[$return_col]; 
     } 
    } 
    catch(Exception $e) 
    { 
     echo "Error <p> ".$e->getMessage()." at line ".$e->getLine() ; 
    } 
} 

나는 어떤 일이 느려지는지 잘 모르겠습니다. 어떤 아이디어?

+5

PDO (느린 버전)를 변경 한 후에 버전을 표시 할 수 있습니까? 또한 두 경우에 대해 서버에 대해 실행되는 실제 쿼리를 제공 할 수 있습니까 (Where 절 포함)? –

+0

테이블에 몇 개의 행이 있습니까? Where 절 필드가 인덱싱됩니까? 그 모든 것을 빠르게 할 PDO 개념이 아닙니다. –

+0

JOIN 절 및 다른 테이블의 특정 데이터를 검색하는 다른 클래스 메서드와 함께 테이블에 3000 개 이상의 행이 있습니다 (저는 100 개만 표시합니다). 이 인덱싱 측면을 살펴 보았지만 정상적으로 작동합니다. 실제 예제를 보여주기 위해 클래스를 약간 분해 한 후에 코드를 작성하려고합니다. – Dimitri

답변

0

원래 쿼리는 작동하지 않으므로 실제 코드가 아닙니다.

그래서 저는 여러분이 언급 한 느린 이유가 같은 기원 일 수 있다고 생각합니다 - 일종의 단순한 실수입니다. 코드 나 질문을 작성할 때 좀 더 세심한주의가 필요합니다.

애플리케이션 당 한 번만 연결하고 정상적인 쿼리를 실행하는지 확인하십시오.

예외 처리 방법이 잘못되었습니다. 너는 붙잡고 반향해서는 안된다.

+0

나는 문제가 무엇인지 알아 냈다. 필자는 PDO에 대한 새로운 코드를 작성한 이후로 너무 많은 연결을 열었습니다. 또한 예외 처리에 대해 귀하는 무엇을 제안 하시겠습니까? – Dimitri

+1

그냥 잡지 않습니다. –