2011-01-13 6 views
0

CI 활성 레코드 라이브러리를 사용하여 MySQL 쿼리를 실행하려고합니다. 쿼리가 잘못된 경우 CI는 내부 서버 오류 500을 호출하고 다음 단계를 처리하지 않고 종료합니다.CodeIgniter에서 쿼리 오류 처리

오류 문 앞에 처리 된 다른 모든 쿼리를 롤백해야하며 롤백도 발생하지 않습니다. 제발 도와 줄 수 있습니까?

코드 조각은 다음과 같습니다 :

function dbInsertInformationToDB($data_array) 
{ 
    $returnID = ""; 
    $uniqueDataArray = array(); 

     // I prepare a array of values here 
    $uniqueTableList = filter_unique_tables($data_array[2]); 
    $this->db->trans_begin(); 

    // inserting is done here 
    // when there is a query error in $this->db->insert().. it is not rolling back the previous query executed 

    foreach($uniqueTableList as $table_name) 
    { 
     $uniqueDataArray = filterDataArray($data_array,$table_name,2); 
     $this->db->insert($table_name,$uniqueDataArray); 
     if ($this->db->_error_message()) 
     { 
      $error = "I am caught!!"; 
     } 
     $returnID = $this->db->affected_rows(); 
    } 
    if ($this->db->trans_status() === FALSE) 
    { 
     $this->db->trans_rollback(); 
    } 
    else 
    { 
     $this->db->trans_commit(); 
    } 

    return "ERROR"; 
} 
+5

하는 테이블이 InnoDB의하지의 MyISAM 있는지 확인합니다. MyISAM은 트랜잭션을 지원하지 않으므로 롤백이 없다. SQL 쿼리에서 SHOW CREATE TABLE tablename을 수행하십시오. – Yada

+0

나에게 들릴 것 같아, Yada. 이 의견을 답변으로 옮겨야합니다. 그렇지 않으면 받아 들일 수 없습니다! – musoNic80

+0

야다, 맞아. 나는 테이블 타입을 InnoDB로 바꾸었고 잘되었다. 한 가지 더 많은 문제가 SQL에 오류가 발생하면 CI는 오류 페이지를 던집니다. 그것은 내가 오류를 처리하고 의미있는 메시지를 보여줄 수있는 곳에서 진행되지 않습니다 .. 어떤 팁? –

답변