Пока Codeigniter не реализует использование PDO, есть ли способ использовать его для стабильного и безопасного CI? В настоящее время вместо использования драйвера db я использую модель, в которой есть весь мой код PDO, например prepare
, fetch
, execute
и т. д. Что остальные из вас делают?
Codeigniter: использование PDO вместо mysql
Ответы (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';
$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';
КИ при правильном использовании надежен и безопасен. Использование PDO, хотя и лучше, если вы не используете фреймворк, не обязательно принесет вам ужасную пользу по сравнению с классом CI_Database.
Если вас это действительно беспокоит, вы можете заменить функции mysql_*()
на эквивалентные функции mysqli_*()
, но на самом деле это не даст заметной разницы, если вы не используете гипероптимизацию.
Следует отметить, что на самом деле это можно сделать автоматически, установив соответствующий тип базы данных (как отмечает Rocket ниже).
mysqli
в конфигурации CodeIgniter. Тогда он будет использовать функции mysqli вместо функций mysql.
- person Rocket Hazmat; 15.02.2012
попробуйте php-activerecord Я считаю, что это использует драйвер PDO, это просто подключи и играй через искры.
Просто повторите для всех, у кого возникла такая же проблема (включая меня в будущем), пожалуйста, убедитесь, что какой бы 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 с пустой страницей.
mysql_*()
? - person Mike B   schedule 15.02.2012mysqli_*
. У них есть драйвер PDO, который вы можешь использовать. EDIT2: проверьте этот вопрос. - person Rocket Hazmat   schedule 15.02.2012CI_Database
) со специфическими для БД функциями, реализованными в драйверах. Драйвер MySQL используетmysql_*
. Также есть драйверыMySQLi
иPDO
. Ни один из них не использует подготовленные операторы, потому что экранирование заполнителей параметров уже выполняется CI. - person Francis Avila   schedule 15.02.2012