Установка драйвера 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.