PHP“mysqli.so:未定义符号:mysqlnd_connect,位于第 0 行未知”

PHP“mysqli.so:未定义符号:mysqlnd_connect,位于第 0 行未知”

我一直试图让 PHP CLI(Ubuntu 上的 7.0.7)与 mysqli 一起工作,但没有成功。启动它时,我不断收到相同的错误消息:

mysqli.so: undefined symbol: mysqlnd_connect in Unknown on line 0

这是 php -i 的一些输出(清楚地显示两者都已加载):

mysqli

MysqlI Support => enabled
Client API library version => mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $
Active Persistent Links => 0
Inactive Persistent Links => 0
Active Links => 0

Directive => Local Value => Master Value
mysqli.allow_local_infile => On => On
mysqli.allow_persistent => On => On
mysqli.default_host => no value => no value
mysqli.default_port => 3306 => 3306
mysqli.default_pw => no value => no value
mysqli.default_socket => no value => no value
mysqli.default_user => no value => no value
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
mysqli.reconnect => Off => Off
mysqli.rollback_on_cached_plink => Off => Off

mysqlnd

mysqlnd => enabled
Version => mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $
Compression => supported
core SSL => supported
extended SSL => supported
Command buffer size => 4096
Read buffer size => 32768
Read timeout => 31536000
Collecting statistics => Yes
Collecting memory statistics => No
Tracing => n/a
Loaded plugins => mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password
API Extensions => mysqli,pdo_mysql

PHP 是使用 来安装的sudo apt install php7.0-cli

怎么了?

答案1

在 mysqlnd 之后加载 mysqli 时,问题就解决了。但是

如果您使用 phpenmod 启用模块,则它们按字母顺序启用。mysqli 在顺序上位于 mysqlnd 之前。

我通过将 mysqli 的符号链接重命名为 zmysqli 来解决这个问题 - 虽然很粗糙,但确实有效。

答案2

我查看了 php 的多个安装文档,其中一个说要在 php.ini 中启用扩展 = mysqli(取消注释),但是 phpenmod 已启用,因此 mysqli 不应该在 php.ini 中,我注释掉了该行,所有内容都正确加载了。

答案3

原因是您需要在加载 mysql/php-mysqli/mysqli/php-mysqli 扩展之前加载 mysqlnd。

在加载这些扩展之前,请检查 php.ini 中是否已加载 php-mysqlnd。有时,apache 决定将所有扩展分成单独的 .ini 文件,您必须通过重命名文件来确保在 php-mysqli 扩展和朋友之前加载 mysqlnd 文件。

答案4

类似但不是相同的问题:

PHP Warning:  PHP Startup: Unable to load dynamic library 'mysql' (tried: /usr/lib64/php/modules/mysql (/usr/lib64/php/modules/mysql: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/mysql.so (/usr/lib64/php/modules/mysql.so: undefined symbol: mysqlnd_get_client_info)) in Unknown on line 0

可以通过mysql在模块之后加载模块(唯一的区别)来解决mysqlnd

sudo mv /etc/php-cli.d/20-mysql.ini /etc/php-cli.d/21-mysql.ini

相关内容