如何在PHP 7中启用MySQLi扩展?

93

我已在Ubuntu 14.04(Trusty Tahr)上安装了PHP 7和MySQL 5.5.47。

我使用以下命令检查已安装的扩展:

sudo apt-cache search php7-*

它的输出为:

php7.0-common - Common files for packages built from the PHP source
libapache2-mod-php7.0 - server-side, HTML-embedded scripting language (Apache 2 module)
php7.0-cgi - server-side, HTML-embedded scripting language (CGI binary)
php7.0-cli - command-line interpreter for the PHP scripting language
php7.0-phpdbg - server-side, HTML-embedded scripting language (PHPDBG binary)
php7.0-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
libphp7.0-embed - HTML-embedded scripting language (Embedded SAPI library)
php7.0-dev - Files for PHP7.0 module development
php7.0-dbg - Debug symbols for PHP7.0
php7.0-curl - CURL module for PHP
php7.0-enchant - Enchant module for PHP
php7.0-gd - GD module for PHP
php7.0-gmp - GMP module for PHP
php7.0-imap - IMAP module for PHP
php7.0-interbase - Interbase module for PHP
php7.0-intl - Internationalisation module for PHP
php7.0-ldap - LDAP module for PHP
php7.0-mcrypt - libmcrypt module for PHP
php7.0-readline - readline module for PHP
php7.0-odbc - ODBC module for PHP
php7.0-pgsql - PostgreSQL module for PHP
php7.0-pspell - pspell module for PHP
php7.0-recode - recode module for PHP
php7.0-snmp - SNMP module for PHP
php7.0-tidy - tidy module for PHP
php7.0-xmlrpc - XMLRPC-EPI module for PHP
php7.0-xsl - XSL module for PHP
php7.0 - server-side, HTML-embedded scripting language (metapackage)
php7.0-json - JSON module for PHP
php-all-dev - package depending on all supported PHP development packages
php7.0-sybase - Sybase module for PHP
php7.0-sqlite3 - SQLite3 module for PHP
php7.0-mysql - MySQL module for PHP
php7.0-opcache - Zend OpCache module for PHP
php7.0-bz2 - bzip2 module for PHP

我也无法在phpinfo()中看到MySQLi扩展。我该如何在PHP 7中启用/安装MySQLi扩展?

这就是为什么我无法使用phpMyAdmin的原因。它显示“缺少mysqli扩展”。

8个回答

149

问题在于连接PHP和MySQL的软件包已经停止维护了 (php5-mysql)。如果你安装新的软件包,

sudo apt-get install php-mysql

这将自动更新 Apache 和 PHP 7。


17
这是Ubuntu(16.04)的正确答案。之后重新启动Apache:sudo service apache2 restart - scoobydoo
谢谢Xeno。这是针对Ubuntu(16.04),PHP 7.1的有效答案。 @scoobydoo是正确的。在此之后重新启动apache。 - Riz
2
仅作提醒,php-mysql 已经被弃用多年了,PHP 开发人员已经多次警告该扩展将在 PHP 7 中被删除。建议改用 php-mysqli。 - raphie
2
该贴子的操作系统是Ubuntu,不是Windows。如果插件没有安装,取消注释插件声明也起不了任何作用。如果还没有安装mysqli,可以通过apt-get install php7.3-mysqli 进行安装。你可以创建一个只包含 <?php phpinfo();?> 的Web文件,并搜索mysqli来查找是否已安装。 - Oliver Williams
@raphie 事情是这样的,在安装了php-mysqli之后(如果您列出已安装的软件包,php-mysqli不会显示),此错误会在Ubuntu 20上发生;现在的解决方法是apt install php-mysql。可能是通过apt软件包管理器安装的php-mysqli存在问题: # sudo apt-get install -y php-mysqli 读取软件包列表... 完成 正在构建依赖关系树 正在读取状态信息... 完成 注意,选择 'php7.4-mysql' 而不是 'php-mysqli' php7.4-mysql 已经是最新版本 (7.4.3-4ubuntu2.10)。 升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。 - Peter Kionga-Kamau
无法工作了 E: 无法定位软件包 php7.3-mysqli软件包 php-mysql 不可用,但是有另一个软件包引用它。这可能意味着该软件包缺失、已被废弃或仅可从另一个源获取 - geoidesic

44

对于所有Docker用户,只需在PHP容器内运行docker-php-ext-install mysqli

更新:有关更多信息,请参见https://hub.docker.com/_/php的“如何安装更多PHP扩展”部分。


3
有什么方法可以找到那个信息?是否有相关的文档或资料? - Uchendu
1
速度快的你是我的英雄! - Boris Ivanov
4
@Uchendu,实际上在这里的PHP容器描述中https://hub.docker.com/_/php - 在“如何安装更多PHP扩展”部分。我也花了很长时间才找到它。我已经更新了我的答案,包括这些信息,谢谢。 - Speedy
不起作用。在 Synology DSM 上使用 Docker。 - Erik Thiart
@ErikThiart,你是否使用上面链接中的官方PHP容器?另外,是什么出了问题?命令不存在还是返回错误或者包未安装?请提供更多细节。 - Speedy
2
这听起来像是一个适用于特定Docker镜像而不是一般的Docker安装的修复。 - Peter Kionga-Kamau

41
sudo phpenmod mysqli
sudo service apache2 restart

  • phpenmod moduleName 启用 PHP 7 的模块(之后重新启动 Apache,使用 sudo service apache2 restart
  • phpdismod moduleName 禁用 PHP 7 的模块(之后重新启动 Apache,使用 sudo service apache2 restart
  • php -m 列出已加载的模块

2
谢谢,那很有帮助。你能解释一下phpenmod是做什么的吗? - Haseeb Jehanzeb
警告:在 /etc/php/7.1/mods-available 目录下不存在 mysqli 模块的 ini 文件。 - Robert Sinclair
@RobertSinclair 你安装了 php-mysql 包吗? - Pipo
1
@Pipo,就是这样,好的谢谢! - Robert Sinclair

41
我找到了解决方法。我成功地在php.ini中启用了MySQLi扩展。我只需取消php.ini中这行的注释:

extension=php_mysqli.dll

现在MySQLi运行良好。以下是在Apache 2、PHP 7和Ubuntu 14.04环境下php.ini文件的路径:

/etc/php/7.0/apache2/php.ini

默认情况下,在 PHP 7 中,MySQLi 扩展是被禁用的。


38
php_mysqli.dll 适用于 Windows 操作系统。 - miken32
1
谢谢!我花了一些时间才让我的WordPress安装运行起来,因为mysql_*在php7中已经被弃用了,这个帮了我很多! - Vibhu Tewary
谢谢,这对我在Win7上很有帮助!还得取消注释extension_dir指令。 - MJA
对我来说,它是 ext/php_mysqli.dll(PHP 7.4.2)。 - Krzysztof Grzybek

32

在Ubuntu上,如果缺少mysqli,请执行以下操作:

sudo apt-get install php7.x-mysqli

sudo service apache2 restart

7.x 替换为您的 PHP 版本。

注意:这可以是 7.0 及更高版本,但例如 Drupal 建议使用 PHP 7.2,原因包括安全等方面。

要检查您的 PHP 版本,请在命令行中输入:

php -v
如果您缺少 mbstring,那么您需要执行完全相同的操作:
apt-get install php7.x-mbstring

service apache2 restart

最近我在将PHP从7.0升级到7.2时需要为phpMyAdmin做这件事,在Ubuntu 16.04(Xenial Xerus)上进行。


是的。不。不再起作用了。 - geoidesic
嗯,这是一个四年前的帖子。 - Marco Schoolenberg

14
在Ubuntu中,您需要取消注释位于/etc/php/7.0/apache2/php.ini的文件中的此行:php.ini
extension=php_mysqli.so

6
这行内容在Ubuntu 16.04的php.ini文件中不存在。需要添加吗? - motorbaby
同样适用于Ubuntu 0.18.04.1。 - Peter Girnus

-2

-6

让我们使用

mysqli_connect

替代

mysql_connect

因为在PHP 7中不支持mysql_connect


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