Встановлення драйвера PDO на сервер MySQL Linux


102

Не так давно мені запропонували змінити свій код на використання PDO, щоб параметризувати мої запити та безпечно зберегти HTML у базі даних.

Ну ось основні проблеми:

  1. Я переглянув http://php.net/manual/en/ref.pdo-mysql.php , і я насправді не знаходжусь, куди мені слід поставити цю $ ./configure --with-pdo-mysqlрядок ...

  2. Сайт, який я будую, фактично вимагає лише PDO для однієї сторінки. Хоча я можу розглянути можливість її повторного написання, це займе певний час, і мені потрібні сторінки, які незабаром запустяться, тому я не можу повністю вимкнути MySQL. Якщо я встановлю PDO, чи зможу я використовувати mysql_*обробники?

На розглянутому сервері працює PHP версії 5.4.6-1ubuntu1 та Apache / 2.2.22 (Ubuntu). Я також запускаю базу даних phpMyAdmin, якщо це має значення.

Відповіді:


183

На Ubuntu ви повинні мати можливість встановити необхідні частини PDO з apt за допомогою sudo apt-get install php5-mysql

Немає обмежень між одночасним використанням PDO та mysql_. Однак вам потрібно буде створити два підключення до вашої БД, одне з mysql_ і одне за допомогою PDO.


1
добре, я заглянув у свій файл php.ini, і це виглядає як pdo в включеному за замовчуванням, мені все одно потрібно знати, чи можу я використовувати як обробники pdo, так і mysql_ * ...
Юрій Скарбаті

1
@ YuriCollector'sEditionRossi оновив відповідь на це.
Jani Hartikainen

1
Варто зазначити, що після зміни потрібно застосувати apache після.
Адам Ф

1
@jonaspas, якщо ви перебуваєте на ubuntu, спробуйте оновити, а sudo apt-get updateпотім запустіть оригінальну установку з відповіді.
ryAn_Hdot

14
Дякую ryAn_Hdot! Але це також не спрацювало для мене. Моє рішення зараз: я запускав php7, і мені довелося це зробитиsudo apt-get install php-mysql
johnnydoe82

25

Це гарне запитання, але я думаю, що ви просто неправильно розумієте те, що прочитали.

Встановіть PDO

Це ./config --with-pdo-mysqlте, що ви повинні вкласти лише в тому випадку, якщо ви складаєте власний PHP-код. Якщо ви встановите його разом з менеджерами пакунків, вам просто потрібно використовувати командний рядок, який надав Jany Hartikainen: sudo apt-get install php5-mysqlі такожsudo apt-get install pdo-mysql

Сумісність з mysql_

Крім того, що mysql_ насправді відлякує, вони обоє незалежні. Якщо ви використовуєте PDO, mysql_ не пов'язаний, і якщо ви використовуєте mysql_, PDO не потрібно.

Якщо вимкніть PDO, не змінюючи жодного рядка в коді, у вас не виникне проблем. Але оскільки ви почали з'єднуватися та писати запити з PDO, вам доведеться зберегти його та відмовитися від mysql_.

Кілька років тому команда MySQL опублікувала сценарій для переходу на MySQLi . Я не знаю, чи можна це налаштувати, але це офіційно.


Так що якщо я хочу використовувати обидва одночасно, мені доведеться використовувати обидва способи підключення? що я маю на увазі: у мене, як 50 сторінок, вже запущено, з великою кількістю коду, пройшов як рік, і я не можу повернутись лише на 1 сторінку, але не все одно ... що мені потрібно зробити запустити ці 50 сторінок так, як вони є, і цю одну сторінку, яку я зараз пишу за допомогою pdo, це можливо? дякую за ваш час ^^
Юрій Скарбаті

Рефакторинг може бути корисним, якщо вам доведеться змінити багато коду. Але так, якщо ви хочете, щоб ви використовували обидва, вам доведеться встановити два з'єднання.
artragis

є просте, чому переробляти код? Я зараз працюю над роботою, яку я не розпочав самостійно, це робив інший програміст, який її покинув, і тепер мені доведеться адаптуватися до його коду ... це трохи суворо, оскільки кожен має свій стиль, тому я вважаю за краще залишити його таким, яким він є зараз, оскільки це програмне забезпечення використовувалось дотепер без жодних проблем ... thx btw ^^ мені потрібно закрити з'єднання mysql перед відкриттям pdo одного, або я можу мати відкрите обоє одночасно? ^^
Юрій Скарбаті

1
можливо, ви можете використовувати IDE, як netbeans або eclipse
artragis

1
Я знайшов сценарій, який дозволяє вам перейти до mysqli та, можливо, до PDO
artragis

17

В основному, відповідь від Яні Хартікайнен є правильною! Я підтримав його відповідь. Чого не вистачало в моїй системі (на основі Ubuntu 15.04), це ввімкнути розширення PDO в моєму php.ini

extension=pdo.so
extension=pdo_mysql.so

перезапустіть веб-сервер (наприклад, за допомогою "sudo service apache2 restart") -> кожен штраф :-)

Щоб знайти, де знаходиться ваш поточний активний файл php.ini, ви можете скористатись phpinfo () або іншими підказками звідси: https://www.ostraining.com/blog/coding/phpini-file/


Працювали для мене. Дякую. +1
Марсель

1
У мене не було цих рядків у моєму файлі php.ini. У мене тільки є extension=pdo_mysql.dll, тому я прокоментував це і перезапустив апаш, і це спрацювало.
користувач3494047

@ user3494047 Я думаю, ви перебуваєте в системі Windows. Я взяв config example з системи Linux. Але чудово, що ви поділилися своїм досвідом!
Тобіас Гартнер

Насправді його ubuntu 14.04
користувач3494047

Дякую! Я, мабуть, запустив десяток sudo apt-get install...команд, і нічого не вийшло, нарешті додавши ці два рядки до php.ini це зробив. Просто згадуючи команду перезапуску сервера Apache , який ви запускаєте після збереження: sudo service apache2 restart. І мій шлях до файлу php.ini був /etc/php/7.0/apache2/php.ini(ОС: Lubuntu 16.04, аналогічний Ubuntu для цих цілей). Запустіть його sudo gedit <fullpath>для редагування. (gedit або geany або будь-який текстовий редактор у вашій системі)
Nikhil VJ

10

Спочатку встановіть необхідні частини PDO, запустивши команду, sudo apt-get install php*-mysqlде * - назва версії php, як 5.6, 7.0, 7.1, 7.2. Після встановлення вам потрібно згадати (коментувати, якщо вона вже є) ці два твердження

extension=pdo.so
extension=pdo_mysql.so

у вашому .ini-файлі та перезавантажте сервер командою

sudo service apache2 restart

Ця відповідь не додає нової інформації - тому її imo не корисний.
Тобіас Гартнер

1
Ця відповідь була надзвичайно корисною, оскільки вона вказала, що вам потрібен номер версії PHP в php*-mysql. Я намагався php-mysqlі php7-mysqlбезрезультатно, і тоді ця відповідь запечатала угоду! Дякую!
jedmao

Працювали для мене. Дякую.
Махір Алтінкая

@ MahirAltınkaya Gald, це допомогло.
Авниш алок

8
  1. PDO розшифровується як об'єкт даних PHP.
  2. PDO_MYSQL - це драйвер, який реалізує інтерфейс між об'єктом даних (базою даних) та входом користувача (шаром під користувальницьким інтерфейсом, який називається "код позаду"), що здійснює доступ до вашого об'єкта даних, бази даних MySQL.

Метою використання цього є реалізація додаткового рівня безпеки між інтерфейсом користувача та базою даних. За допомогою цього шару дані можна нормалізувати перед тим, як вставити у вашу структуру даних. (Столиці - це столиці, немає провідних чи кінцевих пробілів, усі дати належним чином сформовані.)

Але є кілька нюансів цього, про які ви, можливо, не знаєте.

Перш за все, до цих пір ви, мабуть, писали всі запити у щось подібне до URL-адреси, і ви передаєте параметри за допомогою самої URL-адреси. Використовуючи PDO, все це робиться під рівнем користувальницького інтерфейсу. Користувальницький інтерфейс передає м'яч PDO, який переносить його в поле і висаджує його в базу даних для 7-бального TOUCHDOWN .. він отримує сім балів, тому що він його отримав і зробив набагато безпечніше, ніж передавати інформацію через URL .

Ви також можете посилити свій сайт до інжекції SQL , використовуючи рівень даних. Використовуючи цей посередницький шар, який є ТІЛЬКИМ «гравцем», який спілкується з базою даних, я впевнений, що ви можете зрозуміти, як це може бути набагато безпечнішим. Інтерфейс до верстата даних до бази даних, верстата даних до бази даних до рівня даних в інтерфейс.

І:

Реалізуючи кращі практики під час написання коду, ви будете набагато щасливішими з результатом.

Додаткові джерела:

Re: Функції MySQL в URL-адресі php dot net / manual / en / ref dot pdo-mysql dot php

Re: трирівнева архітектура - додавання безпеки до ваших програм https://blog.42.nl/articles/introducing-a-security-layer-in-your-application-architecture/

Re: Об'єктно-орієнтований дизайн за допомогою UML Якщо ви дійсно хочете дізнатися більше про це, це найкраща книга на ринку, Грейді Буч був батьком UML http://dl.acm.org/citation.cfm?id=291167&CFID = 241218549 & CFTOKEN = 82813028

Або перевірити за допомогою бітмоні. Там є група, я впевнений, що ви могли б багато чому навчитися.

>

Якби ми знали, що насправді означає термінологія, нам би нічого не потрібно було вивчати.

>


0

Якщо вам потрібен контейнер Docker CakePHP з MySQL, я створив для цього зображення Docker! Не потрібно турбуватися про його налаштування. Це просто працює!

Ось як я встановив зображення на основі Ubuntu:

https://github.com/marcellodesales/php-apache-mysql-4-cakephp-docker/blob/master/Dockerfile#L8

RUN docker-php-ext-install mysql mysqli pdo pdo_mysql

Створення та запуск вашої програми - це лише двоетапний процес (враховуючи, що ви перебуваєте в поточному каталозі програми):

$ docker build -t myCakePhpApp .
$ docker run -ti myCakePhpApp

У випадку, якщо хтось спробує це зробити з уже запущеним контейнером sudo /etc/init.d/apache2 restart
docker
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.