2015-04-09 5 views
2

Я работаю над небольшим приложением, которое подключается к базе данных и извлекает данные из таблиц. Но мне нужно показать вызывающему, что я не смог подключиться к указанному хосту. Как я могу это сделать? Я пытался использовать этот фрагмент, но он не работает:CodeIgniter Проверьте, не работает ли база данных

define('ERROR_STR', 'ERROR: '); 
# ... 
if ($this->db->_error_number() OR $this->db->_error_message()) { 
    die(ERROR_STR . $this->db->_error_number() . ': ' . $this->db->_error_message()); 
} 

В моих журналах я получаю это в списке:

ERROR - 2015-04-09 15:18:19 --> Severity: Warning --> mysqli_connect(): (HY000/2005): Unknown MySQL server host 'localhosta' (2) 

Но мне нужно проверить во время выполнения (после попытки подключения, очевидно) если параметры конфигурации базы данных неверны (хост/пользователь/пароль) и эхо-сообщение об ошибке, возвращаемое вызывающему абоненту. $ this-> db -> _ error_number() и $ this-> db -> _ error_message() не дают мне эту ошибку msgs. Любые идеи? Надеюсь, я был достаточно ясен. Благодарю.

EDIT:

Вот мой дб конфигурация:

$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = ''; 
$db['default']['password'] = ''; 
$db['default']['database'] = ''; 
$db['default']['dbdriver'] = 'mysql'; 
$db['default']['dbprefix'] = ''; 
$db['default']['pconnect'] = TRUE; 
$db['default']['db_debug'] = FALSE; 
$db['default']['cache_on'] = FALSE; 
$db['default']['cachedir'] = ''; 
$db['default']['char_set'] = 'utf8'; 
$db['default']['dbcollat'] = 'utf8_general_ci'; 
$db['default']['swap_pre'] = ''; 
$db['default']['autoinit'] = FALSE; 
$db['default']['stricton'] = FALSE; 

Но это слито в массив конфигурации реальной БД в моем контроллере:

$this->connected = false; 

    $this->load->database(array_merge(array(
     'hostname' => "localhost", 
     '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", 
        ), (array) $json->conn), TRUE); 

    if ($this->db->initialize() !== FALSE) { 
     die('Not CONNECTED!'); 
    } 

    $this->connected = true; 

Но я получаю сообщение об ошибке в моем бревна для этой линии

if ($this->db->initialize() !== FALSE) { 

ERROR - 2015-04-09 15:47:48 --> Severity: Notice --> Undefined property: Main::$db /.../.../... 

Я понятия не имею, что не так.

+0

«Неизвестный сервер MySQL-сервера« localhosta »- это довольно четкое сообщение о неправильной конфигурации подключения db – Cristik

+0

set $ db ['default'] ['db_debug'] = FALSE; чтобы показать ошибку – Saty

+0

@Cristik, да, но я хочу получить это сообщение внутри своего контроллера, чтобы я мог отображать его пользователю. Не знаю, как и когда это было записано в журналы. '-' –

ответ

1

Удаление последнего параметра $this->load->database (который по умолчанию FALSE) действительно сделал остальную часть работы.

Это новый код от моего контроллера:

$this->connected = false; 

$this->load->database(array_merge(array(
    'hostname' => "localhost", 
    'username' => "root", 
    'password' => "root", 
    'database' => "automaserv", 
    'dbdriver' => "mysqli", 
    'dbprefix' => "", 
    'pconnect' => FALSE, 
    'db_debug' => FALSE, 
    'cache_on' => FALSE, 
    'cachedir' => "", 
    'char_set' => "utf8", 
    'dbcollat' => "utf8_general_ci", 
), (array) $json->conn)); 

if ($this->db->initialize() === FALSE) { 
    die('Not CONNECTED!'); 
} 

$this->connected = true; 

Спасибо.

0

вы можете поставить вам начальное соединение, чтобы блок попытаться поймать

try{ 
    $this->load->database(array_merge(array(
    'hostname' => "localhost", 
    '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", 
       ), (array) $json->conn), TRUE); 

} catch (exception $e){ 
    echo "can't connect"; 

} 
+0

Хм, я пробовал это, но ничего не происходит. –

+0

ничего, как у вас все еще видят ошибку, или вы не видите, что «не удается подключиться»? – zod201

+0

«Ничего не происходит». Я имел в виду, что проблема сохраняется. Но теперь это исправлено, как я упоминал в своем ответе. В любом случае спасибо. –

Смежные вопросы