如何解决安装MySQL Native Driver时出现‘Could not open input file: ./configure’错误
解决mysqli_result::fetch_all()失效及./configure报错问题
嘿,我来帮你搞定这个问题!你遇到的./configure报错,还有mysqli_result::fetch_all()用不了的情况,根源是这个方法必须依赖MySQL Native Driver(mysqlnd)扩展才能运行,而且你之前的编译步骤少了关键环节,咱们一步步来解决:
第一步:先确认mysqlnd是否已安装
先在PuTTY里运行这条命令,检查当前PHP环境有没有加载mysqlnd:
php -m | grep mysqlnd
- 如果输出
mysqlnd,说明扩展已经装了,那你需要检查mysqli的配置是否正确(比如php.ini里是否启用了mysqli扩展); - 如果没有任何输出,说明你需要安装mysqlnd扩展。
第二步:推荐用包管理器安装(比源码编译简单快捷)
根据你的服务器系统选择对应的命令:
如果你用的是Debian/Ubuntu系统
- 先更新包列表:
sudo apt update
- 安装对应PHP版本的mysqlnd扩展(比如你的PHP是7.4,就用
php7.4-mysqlnd,替换成你的实际版本):
sudo apt install php-mysqlnd
- 重启你的Web服务器和PHP-FPM(如果用了的话):
# 重启Apache sudo systemctl restart apache2 # 或者重启Nginx sudo systemctl restart nginx # 重启PHP-FPM(对应版本) sudo systemctl restart php7.4-fpm
如果你用的是CentOS/RHEL系统
- 安装mysqlnd扩展:
# CentOS7及以下用yum sudo yum install php-mysqlnd # CentOS8+用dnf sudo dnf install php-mysqlnd
- 重启Web服务和PHP-FPM:
# 重启httpd sudo systemctl restart httpd # 重启PHP-FPM sudo systemctl restart php-fpm
第三步:如果非要源码编译(不推荐,仅当包管理器无对应版本时用)
你之前运行./configure报错,是因为没有先通过phpize生成configure脚本,正确的编译步骤是:
- 先安装编译依赖:
# Debian/Ubuntu sudo apt install build-essential php-dev # CentOS/RHEL sudo yum install gcc make php-devel
- 下载对应你PHP版本的源码包(比如PHP7.4.33),解压后进入mysqlnd扩展目录:
wget https://www.php.net/distributions/php-7.4.33.tar.gz tar -xzf php-7.4.33.tar.gz cd php-7.4.33/ext/mysqlnd/
- 运行
phpize生成configure脚本:
phpize
- 现在就能正常运行configure了:
./configure --with-mysqlnd
- 编译并安装扩展:
make && sudo make install
- 最后在php.ini文件中添加
extension=mysqlnd.so,然后重启Web服务和PHP-FPM。
验证是否生效
创建一个简单的PHP测试文件,上传到服务器的Web目录:
<?php // 替换成你的数据库连接信息 $mysqli = new mysqli('localhost', '你的用户名', '你的密码', '你的数据库名'); if ($mysqli->connect_error) { die('连接失败: ' . $mysqli->connect_error); } $result = $mysqli->query('SELECT 1'); // 检查fetch_all方法是否存在 var_dump(method_exists($result, 'fetch_all')); $mysqli->close(); ?>
访问这个文件,如果输出bool(true),就说明fetch_all()已经可以正常使用了!
内容的提问来源于stack exchange,提问作者Utsav Karan
相关产品推荐
相关产品推荐

