2011-01-13 4 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

私にはおそらく、ヤダ。あなたは答えにこのコメントを移動する必要がありますが、それ以外の場合は受け入れられません! – musoNic80

+0

ヤダ、そうです。私はテーブルのタイプをInnoDBに変更し、うまくいった。もう1つの問題は今、SQLがエラーを起こすと、CIはエラーページを投げます。私はどこでエラーを処理し、意味のあるメッセージを表示することができますか。 –

答えて

関連する問題