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
나에게 들릴 것 같아, Yada. 이 의견을 답변으로 옮겨야합니다. 그렇지 않으면 받아 들일 수 없습니다! – musoNic80
야다, 맞아. 나는 테이블 타입을 InnoDB로 바꾸었고 잘되었다. 한 가지 더 많은 문제가 SQL에 오류가 발생하면 CI는 오류 페이지를 던집니다. 그것은 내가 오류를 처리하고 의미있는 메시지를 보여줄 수있는 곳에서 진행되지 않습니다 .. 어떤 팁? –