Установка драйвера 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 Обновил ответ для этого.
— Яни Хартикайнен

1
Стоит отметить, что вам необходимо перезапустить apache после этого, чтобы изменения вступили в силу.
— Adam F

1
@jonaspas, если вы используете ubuntu, попробуйте обновить с помощью, а sudo apt-get updateзатем запустите исходную установку из ответа.
— ryAn_Hdot 08

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

есть ли легкая причина для рефакторинга моего кода? В настоящее время я работаю над работой, которую я начинал не сам, это было сделано другим программистом, который оставил это, и теперь мне нужно адаптироваться к его коду ... это немного сурово, так как у каждого свой стиль, так что я бы предпочел оставить все как есть, так как это программное обеспечение использовалось до сих пор без каких-либо проблем ... спасибо, кстати ^^ мне нужно закрыть соединение 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, поэтому я раскомментировал это и перезапустил apache, и он сработал.
— user3494047 07

@ user3494047 Я думаю, вы работаете в системе Windows. Я взял пример конфигурации из системы Linux. Но здорово, что вы поделились своим опытом!
— Тобиас Гертнер

На самом деле это Ubuntu 14.04
— user3494047

Спасибо! Я, должно быть, 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

11

Сначала установите необходимые части 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

Этот ответ не добавляет новой информации - так что это не поможет.
— Тобиас Гертнер

1
Этот ответ был чрезвычайно полезным, поскольку в нем указывалось, что вам нужен номер версии PHP php*-mysql. Я пытался php-mysqlи php7-mysqlбез толка , а затем этот ответ запечатанной сделки! Спасибо!
— jedmao

Работал у меня. Спасибо.
— Mahir Altınkaya

@ MahirAltınkaya Gald, это помогло.
— Авниш алок

9
  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/introduction-a-security-layer-in-your-application-architecture/

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

Или проверьте с помощью bitmonkey. Там есть группа, с которой, я уверен, вы могли бы многому научиться.

>

Если бы мы знали, что на самом деле означает эта терминология, нам не нужно было бы ничего изучать.

>


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
— докеров
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.