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
C.I. изобщо не използва PDO? Какво използват за преносимост? MySQL адаптерът наистина ли използва mysql_*() функции?   -  person Mike B    schedule 15.02.2012
comment
Почти съм сигурен, че CodeIgniter използва PDO под капака. РЕДАКТИРАНЕ: Драйверът MySQLi използва mysqli_*. Те имат PDO драйвер, който вие може да използва. РЕДАКТИРАНЕ 2: Вижте този въпрос.   -  person Rocket Hazmat    schedule 15.02.2012
comment
За преносимост CI има абстрактен DB API (CI_Database) със специфична за db функционалност, внедрена в драйвери. Драйверът 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'; или получавате грешка en, че не е избрана база данни. - 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

CI, ако се използва правилно, е надежден и безопасен. Използването на PDO, макар и по-добро, ако не използвате рамка, не е задължително да ви е от голяма полза пред класа CI_Database.

Ако наистина ви притеснява, можете да замените mysql_*() функциите с еквивалентните mysqli_*() функции, но това наистина няма да осигури забележима разлика, освен ако не извършвате свръхоптимизиране.


Трябва да се отбележи, че това всъщност може да се направи автоматично чрез подходящо задаване на dbtype (както Rocket отбелязва по-долу).

person cwallenpoole    schedule 14.02.2012
comment
Като странична бележка: ще кажа, че фактът, че подписите са малко по-различни между DB класа на CI и 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