PHP 7 RC3: 如何安装缺失的MySQL PDO

77

我正在尝试在Ubuntu 14.04上使用PHP 7 RC3 + Nginx设置Web服务器(仅供测试)。

我使用ubuntu/trusty64中的Vagrant安装了Ubuntu,并从Ondřej Surý(https://launchpad.net/~ondrej/+archive/ubuntu/php-7.0)安装了PHP 7 RC 3。

我找不到安装MySQL PDO的方法(PHP可以看到PDO类,但没有任何与MySQL相关的内容,如PDO::MYSQL_ATTR_DIRECT_QUERY等)。

看起来没有libphp7.0-mysql(类似于标准的php5-mysqlnd和来自Ondřej的php7.0-fpm等)。

phpinfo()中的PDO部分:

PDO support      enabled
PDO drivers      no value

我该如何获得它?


3
你说了Ubuntu 12.04,但后来又提到你使用的是14.04版本的ubuntu/trusty64。假设你确实在使用Trusty,那么Ondřej没有为Precise版本制作软件包,他的php-modules软件包将提供php-mysql - eggyal
是的,你说得完全正确!(版本已固定)。而且你提供的模块名称建议很好用。谢谢!如果你把它作为答案添加,我会标记它为正确的。 - SmxCde
我的错误 - 我是这样搜索的 apt-cache search php pdo,但在这种情况下模块 php-mysql 并未显示。 - SmxCde
如果它类似于标准的Ubuntu / Debian,则还可以安装php5-mysqlnd来使用[mysql native driver](http://php.net/manual/en/mysqli.overview.php#mysqli.overview.mysqlnd),根据该链接,即使Ubuntu开发人员不默认使用它,也“强烈鼓励”使用它。 - Mike
1
Mike,php5-mysqlnd 对我不起作用,因为我安装了 PHP 7 - Pavel
对于在CentOS 7上的PHP 7,mysqlnd包的名称是php70w-mysqlnd(相对于常规mysql驱动程序的一个巨大优势是支持返回正确的数据类型[例如将int作为int而不是字符串])。 - George Kagan
13个回答

143

对于在Linux上运行Apache2的用户,您需要安装php-mysql

apt-get install php-mysql

如果你正在运行Ubuntu 16.04或更高版本,只需运行以下命令即可,无需编辑php.ini文件。

apt-get install php7.2-mysql

如果您运行的是Ubuntu 15.10或更低版本:

编辑您的php.ini文件,它位于/etc/php/[version]/apache2/php.ini,然后搜索pdo_mysql,您可能会发现类似以下内容:

;extension=pdo_mysql.so

将其更改为此

extension=pdo_mysql.so

保存文件并重新启动Apache

service apache2 restart

请检查您的 phpinfo() 中是否可用。


3
一般性提醒,我 强烈建议 使用 MySQLND (php-mysqlnd) 而不是旧的 php-mysql 包。 - Machavity
并非每个人都有选择客户应用程序已经使用的库的奢侈,也不是每个人都可以轻松地“apt-get”。 - dagelf
对于Ubuntu 16.04,我只使用了“sudo apt-get install php7.0-mysql”和“sudo service apache2 restart”。注意:“service restart apache2”应该是“service apache2 restart”。 - Anthony Scaife
我不得不再次安装php-mysql。看起来该存储库已经进行了一些更新。 - Rodolfo Velasco
1
适用于PHP 7.2,命令为apt-get install php7.2-mysql - ryryan
也适用于PHP 8.0 apt-get install php8.0-mysql - Daniel Juric

42

首先安装php-mysql

sudo apt-get install php7.0-mysql
//change the version number based on the php version

然后启用该模块

sudo phpenmod pdo_mysql

并重启 apache

sudo service apache2 restart 

1
个人+1,因为提供了在php中启用库的命令。 - Mark Odey

6

在Ubuntu 18.04上,以下方法适用于我:

在终端中输入以下命令:

对于PHP7.3:

sudo apt-get install php7.3-gd php7.3-mysql

对于php7.0版本

sudo apt-get install php7.0-gd php7.0-mysql

对于php5

sudo apt-get install php5-gd php5-mysql

对于Ubuntu 20和Apache 2.4.x,我不需要-gd。 sudo apt-get install php7.4-mysql - Buffalo

5

自从eggyal在评论中给出正确建议后,他没有将评论作为答案提供 - 我在这里发布它:在我的情况下,我必须安装模块php-mysql。有关详细信息,请参见问题下的评论。


5
首先,请检查您的php.ini文件是否启用了扩展程序“php_pdo_mysql”和“php_mysqli”,并且“extension_dir”的路径是否正确。如果需要上述任何一种配置,则必须重新启动php-fpm以应用更改。
在我的案例中(我在公司使用Windows操作系统,但我更喜欢OSX或Linux),我通过在php.ini中添加以下值解决了此问题:
; ...

extension_dir = "ext"

; ... 

extension=php_mysqli.dll
extension=php_pdo_mysql.dll

; ...

我希望这可以帮助你。

1
这只有在那些文件实际上首先存在于系统中时才有帮助。 - dagelf

4
  1. 下载 PHP 7 的源代码并解压。
  2. 打开终端。
  3. 进入 ext/mysqli 目录。
  4. 使用以下命令:

    phpize

    ./configure

    make

    make install (以 root 用户身份)

  5. 在 php.ini 文件中启用 mysqli.so 扩展。
  6. 完成!

这对我有用。


谢谢,对于pdo_mysql也适用。不确定为什么它没有作为默认make;make install的编译部分。 o_O - dagelf

4
如果你使用的是Windows操作系统,且php文件夹不在PATH环境变量中,那么你需要在php.ini文件中设置绝对路径。
例如:
extension_dir = "C:/php7/ext"

取消注释

extension=php_mysqli.dll
extension=php_pdo_mysql.dll

重新启动apache2.4并且它应该正常工作。
希望这会有所帮助。

2

我遇到了相同的问题。我可以看到PDO已启用,但没有可用的驱动程序(使用PHP 7-RC4)。我成功解决了这个问题,通过添加php_pdo_mysql扩展来启用。

希望这能帮到你!


2

我通过重新安装php-mysql解决了我的ubunto 20.4问题。

卸载php-mysql:

sudo apt purge php7.2-mysql

然后安装php-mysql:

sudo apt install php7.2-mysql

它会在php.ini中添加新的配置。

1
我遇到了同样的问题,通过在php.ini中启用正确文件名的扩展来解决。它在列表中被列为php_pdo_mysql.so,但/lib/php/modules中的模块名称只是pdo_mysql.so。
所以只需从php.ini文件中删除"php_"前缀,然后重新启动httpd服务,它就可以像魔法一样工作了。
请注意,我正在使用Arch,因此路径名和服务可能因您的发行版而异。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接