Codeigniter: использование PDO вместо mysql

Пока Codeigniter не реализует использование PDO, есть ли способ использовать его для стабильного и безопасного CI? В настоящее время вместо использования драйвера db я использую модель, в которой есть весь мой код PDO, например prepare, fetch, execute и т. д. Что остальные из вас делают?


person enchance    schedule 14.02.2012    source источник
comment
Использование встроенных функций C.I. CI известен своей скоростью и легкостью, почему вы его не используете?   -  person tomexsans    schedule 15.02.2012
comment
К.И. вообще не использует PDO? Что они используют для переноски? Действительно ли адаптер MySQL использует функции mysql_*()?   -  person Mike B    schedule 15.02.2012
comment
Я почти уверен, что CodeIgniter использует PDO под капотом. РЕДАКТИРОВАТЬ: Драйвер MySQLi использует mysqli_*. У них есть драйвер PDO, который вы можешь использовать. EDIT2: проверьте этот вопрос.   -  person Rocket Hazmat    schedule 15.02.2012
comment
Для переносимости CI имеет абстрактный API БД (CI_Database) со специфическими для БД функциями, реализованными в драйверах. Драйвер MySQL использует mysql_*. Также есть драйверы MySQLi и PDO. Ни один из них не использует подготовленные операторы, потому что экранирование заполнителей параметров уже выполняется CI.   -  person Francis Avila    schedule 15.02.2012


Ответы (5)


В CodeIgniter 2.1.4+ с использованием баз данных MySQL (отредактируйте файл: /application/config/databases.php).

Чтобы использовать PDO:

$db['default']['hostname'] = 'mysql:host=localhost';
$db['default']['dbdriver'] = 'pdo';

Чтобы использовать MySQLi

$db['default']['hostname'] = 'localhost';
$db['default']['dbdriver'] = 'mysqli';
person Thiago Pereira    schedule 05.02.2014
comment
С CodeIgniter 3+ теперь вам нужно использовать $db['default']['hostname'] = 'mysql:host=localhost;dbname=database_name';, иначе вы получите сообщение об ошибке с указанием базы данных не выбрано. - person SteeveDroz; 03.03.2019

Использование драйверов PDO вместо mysql требует изменения имени хоста и dbdriver следующим образом:

$db['default']['hostname'] = 'mysql:host=localhost';
$db['default']['dbdriver'] = 'pdo';
person Mathieu F.    schedule 19.06.2013

КИ при правильном использовании надежен и безопасен. Использование PDO, хотя и лучше, если вы не используете фреймворк, не обязательно принесет вам ужасную пользу по сравнению с классом CI_Database.

Если вас это действительно беспокоит, вы можете заменить функции mysql_*() на эквивалентные функции mysqli_*(), но на самом деле это не даст заметной разницы, если вы не используете гипероптимизацию.


Следует отметить, что на самом деле это можно сделать автоматически, установив соответствующий тип базы данных (как отмечает Rocket ниже).

person cwallenpoole    schedule 14.02.2012
comment
На заметку: я скажу, что тот факт, что подписи немного отличаются между классом CI DB и интерфейсом PDO, раздражает, но не так раздражает, как разница между Mysqli и PDO. - person cwallenpoole; 15.02.2012
comment
Просто установите dbtype на mysqli в конфигурации CodeIgniter. Тогда он будет использовать функции mysqli вместо функций mysql. - person Rocket Hazmat; 15.02.2012
comment
@Rocket Это очень хороший момент. Я не знал о таком варианте. - person cwallenpoole; 15.02.2012
comment
PDO хорош для таких вещей, как Sentry. - person Rob Grant; 26.02.2014

попробуйте php-activerecord Я считаю, что это использует драйвер PDO, это просто подключи и играй через искры.

person Philip    schedule 14.02.2012

Просто повторите для всех, у кого возникла такая же проблема (включая меня в будущем), пожалуйста, убедитесь, что какой бы dbdriver вы ни загружали, в php.ini загружена правильная библиотека.

$db['default']['dbdriver'] = 'mysqli'; //MySQLi <-- mysqli.dll
$db['default']['dbdriver'] = 'mysql'; //MySQL <-- mysql.dll
$db['default']['dbdriver'] = 'pdo'; //PDO <-- pdo.dll

Неспособность загрузить правильную dll приведет к сбою CodeIgniter с пустой страницей.

person Eric Kigathi    schedule 03.04.2013