php页面打不开 | PHP | Warning | mysqli_connect(): Headers and client library minor version mismatch.

本文解决了一个在CentOS7.6系统中www/html页面无法打开的问题,通过检查httpd和mariadb状态,发现是由于phpclient版本不一致导致的错误。最终通过卸载并重新安装php-mysqlnd解决了问题。

问题描述

centos 7.6系统。www/html里页面打不开。

  • 查看httpd和mariadb状态,都是active
systemctl status httpd
systemctl status mariadb

但是状态一览,有异常

  • mariadb
Status: "Taking your SQL requests now..."
  • httpd
Status: "Total requests: 1; Current requests/sec: 0; Current traffic:   0 B/sec"
  • 查看httpd的错误日志文件
cd /var/log/httpd
tail error_log
  • 报错,主要 Headers and client library minor version mismatch
[Tue Jun 23 13:57:03.584917 2020] [:error] [pid 26888] [client 111.22.178.34:42143] PHP Warning:  mysqli_connect(): Headers and client library minor version mismatch. Headers:50564 Library:100144 in /var/www/html/ocsreports/require/function_commun.php on line 161, referer: http://175.24.84.82/ocsreports/index.php?function=admin_info

解决方法

  • 查看php client版本,版本不一致
php -i|grep Client

IMAP c-Client Version => 2007f
Client API version => 10.1.44-MariaDB
Client API library version => 10.1.44-MariaDB
Client API header version => 5.5.64-MariaDB
Client API version => 10.1.44-MariaDB
Soap Client => enabled
  • 删除php-mysql,安装php-mysqlnd
yum remove php-mysql
yum install php-mysqlnd

  • 重启服务
systemctl  restart httpd
systemctl  restart mysqld

  • 再次查看,此时版本一致
php -i|grep Client

IMAP c-Client Version => 2007f
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
Client API library version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
Soap Client => enabled

推荐使用php-mysqlnd。而不是php-mysql,php-mysql从PHP5起已经被废弃,并别从PHP7开始已经被移除。

<think>我们正在处理一个数据库连接错误。错误信息明确指出:未知数据库 'pikachu'。这意味着在连接数据库时,指定的数据库名 'pikachu' 在MySQL服务器中不存在。 根据引用[1]的错误信息,错误发生在index.php文件的第14行,调用mysqli_connect()函数时。 解决步骤: 1. 确认数据库是否存在:首先登录MySQL服务器,检查名为'pikachu'的数据库是否已被创建。 可以使用命令行或者phpMyAdmin等工具。在MySQL命令行中,可以运行: ```sql SHOW DATABASES; ``` 查看数据库列表。 2. 如果数据库不存在,则需要创建数据库。创建数据库的SQL命令: ```sql CREATE DATABASE pikachu; ``` 3. 确保在连接数据库时使用的数据库名称与创建的数据库名称完全一致(注意大小写,MySQL在Linux下区分大小写,在Windows下不区分,但最好保持一致)。 4. 检查连接代码:在index.php文件中,找到第14行附近的mysqli_connect()函数调用,确保数据库名称正确。例如: ```php $link = mysqli_connect("localhost", "username", "password", "pikachu"); ``` 这里的数据库名应该是'pikachu'。 5. 如果数据库存在,但连接时仍然报错,检查数据库名称是否有拼写错误或者额外的空格。 6. 另外,确保连接数据库的用户有访问该数据库的权限。可以使用以下命令授权(假设用户为'username'): ```sql GRANT ALL PRIVILEGES ON pikachu.* TO 'username'@'localhost'; FLUSH PRIVILEGES; ``` 7. 如果问题仍然存在,可以尝试在连接时不指定数据库,然后选择数据库: ```php $link = mysqli_connect("localhost", "username", "password"); mysqli_select_db($link, "pikachu"); ``` 这样可以在连接后选择数据库,如果选择失败,可以输出错误信息,帮助诊断。 8. 确保在修改代码后,重新启动Web服务器(如Apache)和MySQL服务,以确保环境更新。 总结:主要原因是数据库不存在或者连接字符串中的数据库名错误。按照以上步骤逐一排查。 为了帮助理解,下面提供一个简单的PHP连接MySQL的示例: ```php <?php $servername = "localhost"; $username = "your_username"; $password = "your_password"; $dbname = "pikachu"; // 创建连接 $conn = mysqli_connect($servername, $username, $password, $dbname); // 检查连接 if (!$conn) { die("连接失败: " . mysqli_connect_error()); } echo "连接成功"; ?> ``` 如果按照上述步骤操作,应该可以解决该错误。 §§相关问题§§ 1. 如何查看MySQL中已存在的数据库? 2. 如何使用命令行创建MySQL数据库? 3. 如何为MySQL用户授予数据库权限? 4. 如何在PHP中使用mysqli_select_db()函数? 5. 如何解决MySQL连接错误(HY000/2002)? </think>### 解决 `mysqli_connect()` 出现 (HY000/1049) 未知数据库 'pikachu' 错误的方法 该错误表示 MySQL 连接时无法识别指定的数据库名。以下是完整的解决步骤: #### 1. **确认数据库是否存在** - 登录 MySQL 命令行: ```bash mysql -u root -p ``` - 执行查询: ```sql SHOW DATABASES; ``` - 检查输出列表中是否存在 `pikachu` 数据库。若不存在,需创建数据库。 #### 2. **创建缺失的数据库** ```sql CREATE DATABASE pikachu; ``` - 验证创建结果: ```sql SHOW DATABASES; -- 确认pikachu出现在列表中 USE pikachu; -- 测试能否切换 ``` #### 3. **检查连接代码** 确保 PHP 代码中的数据库名拼写正确(区分大小写): ```php // 示例连接代码 $connection = mysqli_connect( "localhost", // 主机 "username", // 数据库用户名 "password", // 数据库密码 "pikachu" // 数据库名 ← 重点检查此项 ); ``` - **常见错误**:拼写错误(如 `pikchu`)、大小写不一致(如 `Pikachu`)、多余空格。 #### 4. **验证用户权限** 确保连接用户有访问权限: ```sql GRANT ALL PRIVILEGES ON pikachu.* TO 'username'@'localhost'; FLUSH PRIVILEGES; ``` #### 5. **检查配置文件** 如果使用框架(如 Laravel),确认 `.env` 文件配置正确: ```env DB_DATABASE=pikachu // 确保与代码一致 ``` #### 6. **重启服务** 修改后重启 MySQL 和 Web 服务: ```bash sudo service mysql restart sudo service apache2 restart # 或 sudo service nginx restart ``` #### 7. **错误处理建议** 在代码中添加错误提示,便于调试: ```php if (!$connection) { die("连接失败: " . mysqli_connect_error()); } ``` ### 常见原因总结 | 原因 | 解决方案 | |---------------------|------------------------------| | 数据库未创建 | 执行 `CREATE DATABASE pikachu` | | 代码拼写错误 | 检查 `mysqli_connect()` 参数 | | 用户无权限 | 用 `GRANT` 命令授权 | | 数据库服务未启动 | 重启 MySQL 服务 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值