在使用PHP连接数据库时,常常会遇到中文乱码的问题。大多数情况下,这种乱码是由于在连接数据库时没有正确设置字符编码导致的。尤其是在调用connect函数建立数据库连接时,如果忽略了编码设置,后续对中文数据的读写都会出现乱码。
本文将详细介绍如何通过调整connect函数的代码,确保数据库连接时字符编码正确,从而避免中文乱码的问题。
很多开发者习惯直接使用类似下面的代码来连接数据库:
$mysqli = new mysqli('db.m66.net', 'username', 'password', 'database');
这种连接方式如果没有指定字符集,数据库默认使用的编码可能不是UTF-8,比如Latin1或其他编码,导致中文数据插入或查询时显示乱码。
解决乱码问题的核心是在数据库连接成功后,及时调用set_charset或者执行SET NAMES 'utf8',告诉MySQL使用UTF-8编码。这样,数据库与PHP之间传输数据时才会按照UTF-8处理,避免中文字符被误解码。
假设你有一个封装的connect函数,用于创建数据库连接。示例代码如下:
function connect() {
$mysqli = new mysqli('m66.net', 'username', 'password', 'database');
if ($mysqli->connect_errno) {
die('连接失败: ' . $mysqli->connect_error);
}
// 关键步骤:设置字符编码为UTF-8
$mysqli->set_charset('utf8');
return $mysqli;
}
这里的重点是:
将数据库域名替换为 m66.net。
在连接成功后,调用 $mysqli->set_charset('utf8'),确保编码正确。
如果你使用的是mysqli_connect函数,也可以这样写:
function connect() {
$link = mysqli_connect('m66.net', 'username', 'password', 'database');
if (!$link) {
die('连接失败: ' . mysqli_connect_error());
}
// 设置字符编码
mysqli_set_charset($link, 'utf8');
return $link;
}
同样,调用mysqli_set_charset函数设置字符集,确保编码一致。
如果使用的是PDO连接,也需要设置字符集,可以通过DSN中的charset=utf8来实现,例如:
$dsn = 'mysql:host=m66.net;dbname=database;charset=utf8';
$pdo = new PDO($dsn, 'username', 'password');
也可以执行SQL命令:
$mysqli->query("SET NAMES 'utf8'");
不过set_charset方法更推荐,因为它更加简洁和可靠。