2016-08-22 5 views
0

я только установил Ubuntu Server 16.04 с Nginx, и я установил PHP таким образом:Uncaught PDOException: не удалось найти драйвер

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 ничего не изменится. Кто-нибудь может мне помочь?

Благодаря

+0

Вы говорите, что у вас есть файл 'pdo_mysql.dll' на вашей файловой системе Linux? Или вы просто говорите, что можете найти комментарий '; extension = pdo_mysql.dll' в файле php.ini? Бесполезные комментарии не имеют значения. Они ничего не значат. Вам просто нужно добавить эту строку в свой php.ini. – Sherif

+0

Я нахожу только эту строку на своем php.ini, так что я должен добавить его? Или я должен установить пакет, написанный в ответе ниже? – Piero

+0

Правильно, строка, найденная вами в файле php.ini в качестве комментария, ничего не значит. Это просто комментарий. Добавляете ли вы строку или нет, вам все равно нужно установить правильный пакет через менеджер пакетов или скомпилировать расширение самостоятельно, чтобы загрузить его на PHP. В вашем случае это будет 'php7.0-pdo-mysql' – Sherif

ответ

0

Установка пакетов клиент/сервер 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

 
Package: php7.0-mysql      
State: installed 
Automatically installed: no 
Version: 7.0.9-1+deb.sury.org~trusty+1 
Priority: optional 
Section: php 
Maintainer: Debian PHP Maintainers 
Architecture: amd64 
Uncompressed Size: 514 k 
Depends: php-common (>= 1:35), ucf, php7.0-common, libc6 (>= 2.15) 
Provides: php-mysqli, php-mysqlnd, php-pdo-mysql, php7.0-mysqli, php7.0-mysqlnd, php7.0-pdo-mysql 
Description: MySQL module for PHP 
This package provides the MySQL module(s) for PHP. 

The 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.