以下是PHP PDO中文乱码解决的完整攻略:
1. 确认数据库及表的编码
在使用PDO连接数据库时,建议将数据库(如MySQL)及表的编码都设置为UTF-8,确保所有数据都使用同一种编码。要确认当前使用的编码,可以进行如下查询:
SHOW CREATE DATABASE database_name;
SHOW CREATE TABLE table_name;
如果发现编码不是UTF-8,可以使用如下语句修改:
ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
2. 设置PDO的字符集
在使用PDO连接数据库时,还需使用PDO::exec()方法设置PDO的字符集。如下所示:
$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'username', 'password');
$db->exec("set names utf8");
3. 示例代码
下面是一个示例代码,用于插入数据到MySQL数据库中:
$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'username', 'password');
$db->exec("set names utf8");
// 插入数据
$data = [
'username' => '小明',
'age' => 18,
'address' => '北京市朝阳区'
];
$stmt = $db->prepare("INSERT INTO users (username, age, address) VALUES (:username, :age, :address)");
$stmt->execute($data);
// 查询数据
$sql = "SELECT * FROM users WHERE username = :username";
$stmt = $db->prepare($sql);
$username = '小明';
$stmt->bindParam(':username', $username);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 输出结果
echo "<pre>";
print_r($result);
echo "</pre>";
另外一个示例代码是对于查询结果含有中文字符的情况进行处理:
$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'username', 'password');
$db->exec("set names utf8");
// 查询数据
$sql = "SELECT * FROM users WHERE username = :username";
$stmt = $db->prepare($sql);
$username = '小明';
$stmt->bindParam(':username', $username);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 对查询结果进行转码处理
foreach ($result as &$item) {
foreach ($item as &$value) {
$value = iconv('utf-8', 'gbk', $value);
}
}
// 输出结果
echo "<pre>";
print_r($result);
echo "</pre>";
在这个示例代码中,我们将查询结果中的每个元素都进行了一次转码处理,将UTF-8转为GBK,这样可以保证在输出查询结果时不会出现中文乱码的问题。
希望这些示例代码可以帮助你解决PHP PDO中文乱码的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php PDO中文乱码解决办法 - Python技术站