Я только что установил Ubuntu Server 16.04 с Nginx, и я установил php следующим образом:
sudo apt-get install php7.0-cli php7.0-cgi php7.0-fpm php7.0-curl
И для MySql я установил Percona, таким образом:
apt-get install percona-server-server-5.7 percona-server-client-5.7
но я не могу понять, почему я не могу использовать PDO в моем PHP-скрипте, это мой код:
$db = new PDO("mysql:dbname=db;host=localhost;charset=utf8", "username", "password");
Я получаю эту ошибку:
Uncaught PDOException: could not find driver
Я искал в Интернете, и я обнаружил, что мне нужно раскомментировать эту строку в Windows в php.ini:
;extension=php_pdo_mysql.dll
или эта строка в Linux:
;extension=php_pdo_mysql.so
Я проверил свой php.ini в:
/etc/php/7.0/fpm/php.ini
и у меня есть .dll
файл, а не .so
файл, я также не могу понять, почему у меня есть DLL вместо так. В любом случае, включение этого DLL-файла и перезапуск php ничего не изменят. Кто-нибудь может мне помочь?
Спасибо
Установка клиент-серверных пакетов mysql не влияет на PHP. PHP все еще нуждается в привязках для связи с вашим сервером MySQL, особенно в вашем случае драйвером PDO MySQL.
Пакет, вероятно, будет называться php7.0-pdo-mysql
в зависимости от того, какие репозитории настроены, ваш менеджер пакетов Ubuntu. Если вы используете PHP 7 в Ubuntu 16.04, скорее всего, это будет метапакет, который включает php7.0-mysql
, Вот что я получил от aptitude 16.04 с помощью Ondrej PPA.
aptitude show php7.0-pdo-mysql
Пакет: php7.0-mysql Состояние: установлено Автоматически устанавливается: нет Версия: 7.0.9-1 + deb.sury.org ~ верный + 1 Приоритет: необязательно Раздел: php Сопровождающий: Сопровождающий Debian PHP Архитектура: amd64 Размер без сжатия: 514 k Зависит от: php-common (> = 1:35), ucf, php7.0-common, libc6 (> = 2.15) Предоставляет: php-mysqli, php-mysqlnd, php-pdo-mysql, php7.0-mysqli, php7.0-mysqlnd, php7.0-pdo-mysql Описание: модуль MySQL для PHP Этот пакет предоставляет модуль (и) MySQL для PHP.
php7.0-pdo-mysql
это тот, который нас интересует для загрузки драйвера mysql для PDO в PHP. Поэтому обязательно поищите в вашем менеджере пакетов, чтобы найти правильный пакет, прежде чем пытаться установить, но для ваших дистрибутивов / репозиториев должен быть подобный пакет.
После установки вам нужно будет перезапустить php-fpm, что-то вроде sudo service php7.0-fpm restart
а затем проверьте свой phpinfo()
чтобы убедиться, что pdo_mysql
драйвер теперь загружен.
Вам не нужно редактировать php.ini вручную при установке через менеджер пакетов. Кроме того, добавив extension=pdo_mysql.so
Линия на ваш php.ini не имеет никакого эффекта, если расширение не существует. И очевидно, что попытка загрузить dll не будет работать на Linux, это библиотеки только для Windows.
Других решений пока нет …