Задать вопрос
uaf0x
@uaf0x
Всего понемногу

Как обработать ошибки подключения к базе данных в Codeigniter?

Пользователь при установке вводит свои данные подключения к БД, нужно обработать их и в случае какой-то ошибки пытаться подсказать в чём проблема(имя\хост\пароль), пытаюсь подключатся к БД с неверными данными просто вываливается ошибка, как бы мне её обработать чтобы я мог по ошибке писать подсказки пользователю. Гуглил, долго гуглиг, на разных языках гуглил, ничего не нагуглил (
public function dbtest(){
		$host=htmlspecialchars(trim($this->input->post('dbhost')));
		$user=htmlspecialchars(trim($this->input->post('dbuser')));
		$password=htmlspecialchars(trim($this->input->post('dbpassword')));
		$database=htmlspecialchars(trim($this->input->post('dbname')));

		$databseConfig = array(
				'hostname'=>$host,
				'username'=>$user,
				'password'=>$password,
				'dbdriver' => 'mysqli',
		);

		$this->load->database($databseConfig);
	}


Простите что так сумбурно, уже глаза закрываются(
  • Вопрос задан
  • 342 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!
Как обработать ошибки подключения к базе данных в Codeigniter?
Наверное, решение, которое я предложу, не самое лучшее с точки зрения архитектуры... но и сам CodeIgniter - не есть шедевр архитектурных решений в своей области.

Собственно, по теме:
Рассуждаем логически.
1. CodeIgniter написан на чистом PHP и ничего сверх того, что умеет сам PHP - CodeIgniter делать не может.
2. У нас какие-то сложности с обработкой ошибок подключения к БД на уровне CodeIgniter'a (какие именно - принципиального значения не имеет), но факт в том, что вариант CI вас чем-то не устраивает
3. Нам ничего не мешает подключаться к БД в обход стандартного механизма CI'а (я имею в виду, тестовый коннект, а не "вообще работать в обход стандартных механизмов")

Далее, решение напрашивается само собой:
1. Подключаемся к базе "напрямую", например, с помощью mysqli_connect (с теми данными, которые ввел пользователь)
2.А Проверяем подключение и если "не коннект", проверяем ошибку, например с помощьюmysqli_error
2.Б Делаем то же самое, но получаем не сообщение об ошибке, а её код, функция mysqli_errno

Функция вернет Вам ошибку (текст) либо её номер (код), которые в дальнейшем Вы можете обрабатывать как душе угодно. При этом, "тестовый коннект" можно делать как внутри контроллера, там и вообще в каком-то отдельном файле, который существует отдельно от CI и служит например, для его инсталляции. Иными словами, дальнейшее зависит от Вашей фантазии и конечных потребностей.

P.S. Соотв., если изначально, MySQL не возвращает конкретную ошибку, например "неправильный именно логин" или "логин правильный, а вот пароль - нет" (что в принципе было бы логично, из соображений безопасности) - а Вам нужна именно такая дотошная степень детализации ошибки - получить её каким-то разумным способом не удастся, но ошибки вроде "MySQL-сервера по адресу N - нет" или "Учетные данные для подключения - не верные" - обработать труда не составит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы