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

How can I enable the MySQLi extension in PHP 7?

我已经在 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 扩展。我如何 enable/install MySQLi 扩展 PHP 7?

这就是我无法使用 phpMyAdmin 的原因。它说 "The mysqli extension is missing."

我得到了解决方案。我能够在 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

默认情况下,MySQLi 扩展在 PHP7 中被禁用。

在Ubuntu中,您需要在位于/etc/php/7的文件php.ini中取消注释这一行。 0/apache2/php.ini:

extension=php_mysqli.so

问题是用于将 PHP 连接到 MySQL 的包已弃用 (php5-mysql)。如果安装新包,

sudo apt-get install php-mysql

这将自动更新 Apache 和 PHP 7.

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 列出加载的模块

让我们使用

mysqli_connect

而不是

mysql_connect

因为 mysql_connectPHP 7 中不受支持。

在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

我最近在 Ubuntu 16.04 (Xenial Xerus) 上将 PHP 从 7.0 升级到 7.2 时不得不为 phpMyAdmin 执行此操作。

对于所有 docker 用户,只需 运行 docker-php-ext-install mysqli 来自您的 php 容器。

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

如果 docker 按照 docker-php-ext-install mysqli you should restart the the fpm as per this answer

安装 mysqli 后

来自容器内部

kill -USR2 1