嗨,我在PDO连接上显示重音有问题。我正在学习php一个web开发,我开始使用mysql旧的PHP连接开发
function db_connect()
{
$result = new mysqli('localhost', 'database', 'password', 'user');
if (!$result)
return false;
return $result;
}
我的表使用latin1和utf8字符集,网页工作正常,显示带重音的单词。
我知道charset和collation是好的,因为它以旧方式工作。但是当我尝试使用PDO时,带有重音的所有单词都会有所不同。以下是获取类别名称的示例
$db = database_connect();
$query = " select xxx from yyy where xxxyid = :xxxyid ";
$query_params = array(
':xxxyid' => $xxxyid
);
// Execute the query against the database
$query = $db->prepare($query);
$result = $query->execute($query_params);
if (!$result)
trigger_error('Query failed: ' . mysql_error(), E_USER_ERROR);
$num_xxx = $query->rowCount();
if ($num_xxxs == 0)
return false;
$row = $query->fetch();
return $row['name'];
我的连接是这样设置的
$db_options = array(
PDO::ATTR_EMULATE_PREPARES => false // important! use actual prepared statements (default: emulate prepared statements)
, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION // throw exceptions on errors (default: stay silent)
, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC // fetch associative arrays (default: mixed arrays)
);
$database = new PDO('mysql:host=server;dbname=dbname;charset=utf8', 'user', 'password', $db_options); // important! specify the character encoding in the DSN string, don't use SET NAMES
// create prepared statement with one parameter for the category ID
我试图找到一种方式来显示带有重音的字母,但我无法解决它。
我在您发布的相同链接中找到了解决方案。这个解决方案对我有用:
function db_connect()
{
$result = new mysqli('localhost', 'database', 'password', 'user');
if (!$result) {
return false;
}
if (!$result->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $result->error); exit();
} else {
printf("Current character set: %s\n", $result->character_set_name());
}
return $result;
}
我的解决方案完全不同。没有PDO的任何新选项等等....我的问题是当我通过phpadmin或脚本填写db的值时,总是存在这种问题。但是当我在电子表格软件中填充db表然后将填充的文件导入db时,问题就解决了。这种知识花了我一天的生命。希望能帮助到你。对不起我的英语,我是斯洛伐克人。