我刚安装了一个带Nginx的Ubuntu Server 16.04,我已经用这种方式安装了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
但我无法理解为什么我不能在我的php脚本中使用PDO,这是我的代码:
$db = new PDO("mysql:dbname=db;host=localhost;charset=utf8", "username", "password");
我收到此错误:
Uncaught PDOException: could not find driver
我在网上搜索过,我发现我必须在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 :(得分:1)
安装mysql客户端/服务器包不会影响PHP。 PHP仍然需要绑定来与您的mysql服务器通信,特别是在您的情况下是PDO mysql驱动程序。
该软件包可能会被称为php7.0-pdo-mysql
,具体取决于您的Ubuntu软件包管理器配置了哪些存储库。如果你在Ubuntu 16.04上使用PHP 7,它很可能会成为包含php7.0-mysql
的元数据包。这是我在16.04使用Ondrej PPA从aptitude获得的。
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.
php7.0-pdo-mysql
是我们对在PHP中加载PDO的mysql驱动程序感兴趣的那个。因此,在尝试安装之前,请务必搜索您的软件包管理器以找到正确的软件包,但是您的发行版/存储库应该有类似的软件包。
安装完成后,您需要重启php-fpm,例如sudo service php7.0-fpm restart
,然后检查phpinfo()
以确保pdo_mysql
驱动程序现已加载。
通过包管理器安装时,您不需要手动编辑php.ini。此外,如果扩展名不存在,将extension=pdo_mysql.so
行添加到php.ini中也无效。显然,尝试加载DLL将无法在Linux上运行,这些只是Windows的库。