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";
}
あなたのテーブルはInnoDBテーブルではなくMyISAMのあることを確認してください。 MyISAMはトランザクションをサポートしていないので、ロールバックはありません。 SQLクエリでSHOW CREATE TABLE tablenameを実行します。 – Yada
私にはおそらく、ヤダ。あなたは答えにこのコメントを移動する必要がありますが、それ以外の場合は受け入れられません! – musoNic80
ヤダ、そうです。私はテーブルのタイプをInnoDBに変更し、うまくいった。もう1つの問題は今、SQLがエラーを起こすと、CIはエラーページを投げます。私はどこでエラーを処理し、意味のあるメッセージを表示することができますか。 –