我一直试图让 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