Arhn - архитектура программирования

CodeIgniter не улавливает ошибки БД при использовании PDO в качестве драйвера

Я использую CodeIgniter 2.1.3 и использую класс активной записи с PDO в качестве драйвера базы данных.

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

echo $this->db->_error_message(); //returns nothing
echo $this->db->_error_number();  //returns '0000'

Однако, как только я переключаюсь на использование MySQL в качестве драйвера, я получаю сообщения об ошибках.

Я даже пытался $this->db->query(.... //violating statement обойти класс активной записи, но безуспешно и с большим количеством ошибок.

У меня $db['default']['db_debug'] = TRUE;.

Мне не повезло с использованием PDO, или есть какие-то дополнительные параметры конфигурации, которые необходимо изменить при использовании PDO с CodeIgniter?

01.06.2013

  • Я использую PDO в качестве драйвера, и CI показывает мне ошибки. Я тестирую ветку разработки. Дополнительных настроек PDO нет. Возможно, это была ошибка в CI, которая была исправлена. 01.06.2013
  • В моем случае я не получаю ошибки в PDOException, но _error_message() и _error_number() работают. но если строки не возвращаются, FETCHALL не будет работать. Codeigniter PDO имеет серьезную проблему. 01.06.2013
  • Я также видел ошибку метода fetchAll() при попытке настроить CodeIgniter для использования «pdo». Я еще не уверен, что вызывает это. 24.02.2014

Ответы:


1

Если вы посмотрите драйвер PDO, вы увидите, что соединение PDO выполняется с помощью PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT, который не выдает никаких ошибок.

В общем случае вы хотите, чтобы PDO генерировал исключения, и в этом случае вы передаете приведенные ниже параметры подключения.

array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false
);

Если вы хотите использовать PDO, используйте прямой PDO. PDO — хороший уровень абстракции. Если вы все равно собираетесь использовать драйвер CI DB, я не вижу никаких реальных преимуществ выбора этого по сравнению с mysql или наоборот, потому что вы будете писать свои запросы в стиле CI независимо.

01.06.2013
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..