Может действительно использовать некоторую помощь.Я использую CodeIgniter 3.0 и пытаюсь спроектировать его так, чтобы ошибки базы данных были перехвачены в блоке try catch, а в блоке catch я мог получить подробное описание ошибки базы данных, после чего код продолжит выполнение после перехватаblock.
Лучшее, что мне удалось сделать - это выбросить ошибки, но я не могу получить описание сообщения, поэтому оно довольно бесполезно.
В index.php я установил:
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
в config.php, у меня есть
$config['log_threshold'] = 4;
$config['log_path'] = '';
$config['log_file_extension'] = '';
$config['log_file_permissions'] = 0644;
$config['log_date_format'] = 'Y-m-d H:i:s';
$config['error_views_path'] = '';
в database.php, у меня есть
$active_group = 'default';
$query_builder = TRUE;
$db['default'] = array(
'dsn' => '',
'hostname' => $hostname,
'username' => $username,
'password' => $password,
'database' => $database,
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => FALSE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
Тогда у меня есть фактическая модель, где некоторый код выполняется черезАякс.В основном это
try {
$batch = array();
for ( $x = 0; $x < count($selectedIds); $x++ ) {
$data = array(
"picklist_id" => $picklistId,
"item_index" => $selectedIds[$x],
"text" => $selectedTexts[$x]
);
$batch[] = $data;
}
if( !$this->db->insert_batch("p_picklists_created_selecteds", $batch) )
{
throw new Exception('DB error');
}
} catch (Exception $ex) {
$this->M_debug->log("ERROR!!!!");
$this->M_debug->log($this->db->error()['message']);
// output the error
$this->M_debug->logError($ex);
}
Ошибка базы данных, которую я пытаюсь уловить, заключается в том, что на самом деле нет таблицы с именем p_picklists_created_selecteds, поэтому запрос insert_batch не выполняется.
Теперь мне удалось получитьэто работать в некотором смысле, как я уже говорил.Проверка того, является ли запрос ложным, вызывает исключение.Но вызов моей пользовательской модели M_debug для записи в журнал результатов консоли $ this-> db-> error () ['message']);просто приводит к пустой строке.Я только знаю, что было на самом деле ошибка из-за ручного изучения кода, в будущем мне нужно знать фактические сообщения.
Более того, я не уверен, что все неудачные запросы к базе данных CI будут возвращать false (не так ли?) Было бы неплохо, если бы была какая-то ошибка БД, которую я мог бы проверить, что-то вроде
$this->db->insert_batch("p_picklists_created_selecteds", $batch)
if ( $this->db->error()['code'] != 0 ) {
// throw error
}
вместо
if( !$this->db->insert_batch("p_picklists_created_selecteds", $batch) )
{
throw new Exception('DB error');
}
Но это не имеет никакого эффекта.
также вы можете подумать, что установка 'db_debug' => TRUE в database.php может помочь, но если я это сделаю, то я могу получить какое-то сообщение об ошибке базы данных в консоли Chrome, что приятно, но тогда приведенный выше код не выдает ошибку, другими словами, код в блоке исключений не выполняется, и код не продолжаетсявыполнение все просто останавливается на ошибке в запросе ajax
Любая помощь будет оценена.Спасибо