欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP 中 mysqli 出错信息为乱码

程序员文章站 2022-04-24 19:08:32
...

用 PHP 的 mysqli 创建数据库连接时的出错信息显示为乱码。

代码如下:

尚未安装 mysql,只是想看一下 mysqli 在未安装 mysql 时的出错信息。而得到的结果如下:

PHP 中 mysqli 出错信息为乱码

在 chrome 和 IE11 下均为乱码。

由检查工具得到 http response header 中的 charset 为 utf-8,而 chrome 和 IE11 的默认设置也均为 utf-8。此外,php 文件本身以及 Apache 和 PHP 的默认编码设置也均为 utf-8。

目前推测是 mysqli 本身的问题,因为图中乱码的部分与 mysqli_connect_error() 得到的乱码一致。

mb_detect_encoding($conn->connect_error) 检测编码得到的结果显示,错误信息的编码也是 utf-8。

如何解决?


无意冒犯,但是鉴于很多答主尚未仔细阅读问题描述就匆忙下定论,我决定重复一下重要的事情:

没有安装 MySQL!

没有安装 MySQL!

没有安装 MySQL!

我只是想知道 mysqli 在没有安装 MySQL 的情况下得到的错误信息是什么。然而这个错误信息居然是乱码,所以才有了这个问题。


进展:在 console 中用 php 解释器运行能够得到正确的错误信息,而且发现是中文,如下图所示:

PHP 中 mysqli 出错信息为乱码

这个出错信息是由 Windows 系统的网络通信相关模块提供的(之前在代理服务器配置错误的情况下也经常在日志中看到这样的错误信息),所以目测这个锅要由 Win10 来背。

问题依然没有解决。虽然是中文,但是尝试了以 GB2312、GBK、GB18030 方式显示,亦为乱码,只不过乱码内容不同罢了。

回复内容:

用 PHP 的 mysqli 创建数据库连接时的出错信息显示为乱码。

代码如下:

尚未安装 mysql,只是想看一下 mysqli 在未安装 mysql 时的出错信息。而得到的结果如下:

PHP 中 mysqli 出错信息为乱码

在 chrome 和 IE11 下均为乱码。

由检查工具得到 http response header 中的 charset 为 utf-8,而 chrome 和 IE11 的默认设置也均为 utf-8。此外,php 文件本身以及 Apache 和 PHP 的默认编码设置也均为 utf-8。

目前推测是 mysqli 本身的问题,因为图中乱码的部分与 mysqli_connect_error() 得到的乱码一致。

mb_detect_encoding($conn->connect_error) 检测编码得到的结果显示,错误信息的编码也是 utf-8。

如何解决?


无意冒犯,但是鉴于很多答主尚未仔细阅读问题描述就匆忙下定论,我决定重复一下重要的事情:

没有安装 MySQL!

没有安装 MySQL!

没有安装 MySQL!

我只是想知道 mysqli 在没有安装 MySQL 的情况下得到的错误信息是什么。然而这个错误信息居然是乱码,所以才有了这个问题。


进展:在 console 中用 php 解释器运行能够得到正确的错误信息,而且发现是中文,如下图所示:

PHP 中 mysqli 出错信息为乱码

这个出错信息是由 Windows 系统的网络通信相关模块提供的(之前在代理服务器配置错误的情况下也经常在日志中看到这样的错误信息),所以目测这个锅要由 Win10 来背。

问题依然没有解决。虽然是中文,但是尝试了以 GB2312、GBK、GB18030 方式显示,亦为乱码,只不过乱码内容不同罢了。

在你的环境下,用PHP输出中文是否正常?
有没有加上header('Content-type: text/html; charset=utf-8');
手动改一下Chrome的编码试试看?

我在电脑上试了试,三个结论:1.你的php页面没有用html的charset设置页面为utf8编码,因为php最终反馈给浏览器的还是纯的html。2.返回的压根就不是utf8,举个例子,返回的gbk,你在页面上设置的是utf8,而浏览器却是GB2312。3.可能是你哪里的配置有问题而你没发现,而且我们也查看不到你电脑上和这个有关的信息,结题吧,没必要盲目的让大家去试了。

设置一下浏览器编码应该就可以,应该不是mysqli的原因,而且写法也错了

你安装的MySQL数据库编码默认为GBK了,建议更改默认编码 保证前端后端和数据库编码的统一,如果设置统一后还不行,那需要MySQL在执行前查询一个set names utf 8来保证缓冲区内容为utf8格式

之前没看作者题目内容中没有安装MySQL,所以删除。
但实际应该是因为mysqlnd扩展PHP 中 mysqli 出错信息为乱码

既然是握手时返回字符集 所以应该与系统字符集有关 建议先安装MySQL试试吧安装后指定字符串utf8

数据库连接设置里面加上设置编码的设置mysqli_query('set name UTF8');

相关标签: php mysql 乱码