CodeIgniter не выдает ошибки базы данных - PullRequest
0 голосов
/ 20 октября 2018

Может действительно использовать некоторую помощь.Я использую 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

Любая помощь будет оценена.Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...