Mysql 正确的pdo连接以使用重音符号
嗨,我在PDO连接上显示口音时遇到问题。 我正在学习php的web开发,我开始使用mysql旧的php连接进行开发Mysql 正确的pdo连接以使用重音符号,mysql,pdo,non-ascii-characters,Mysql,Pdo,Non Ascii Characters,嗨,我在PDO连接上显示口音时遇到问题。 我正在学习php的web开发,我开始使用mysql旧的php连接进行开发 function db_connect() { $result = new mysqli('localhost', 'database', 'password', 'user'); if (!$result) return false; return $result; } 我的表格使用拉丁文1和utf8字符集,网页运行良好,显示带有重音的单词 我知道
function db_connect()
{
$result = new mysqli('localhost', 'database', 'password', 'user');
if (!$result)
return false;
return $result;
}
我的表格使用拉丁文1和utf8字符集,网页运行良好,显示带有重音的单词
我知道字符集和排序规则是可以的,因为它以旧的方式工作。
但是当我尝试使用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
我试图找到一种显示带有重音的字母的方法,但我无法解决它。我的解决方案完全不同。没有任何新的PDO选项等等。。。。我的问题是,当我通过phpadmin或script将值填入db时,总是会出现这种问题。但当我在电子表格软件中填充db表,然后将填充的文件导入db时,问题就解决了。这件事花了我一天的时间。希望能有帮助。对不起,我的英语,我是斯洛伐克人。我在您发布的同一链接中找到了解决方案。此解决方案对我有效:
是mysqli还是PDO?我的问题是PDO,我用PHP和MySQL web Development第四版Luke Welling的作者劳拉·汤姆森(Laura Thomson)的书制作了一个网页,但是这本书现在已经过时了,我意识到我的应用程序根本没有安全性,所以在阅读了这本书之后,我尝试用相同的数据库使用PDO,应用程序已经工作了,当我使用PDO连接时,它仍然工作,但口音很乱。我已经找到了解决方案,但一些程序员并不推荐这种解决方案,我在arraySounds中添加了这一行,就像您有字符编码问题一样。确保你是全面的UTF-8。你有没有关于重音字符如何显示的例子?通常情况下,Windows-1252被发布并解释为UTF-8,反之亦然。我找到了解决方案,但一些程序员不推荐该解决方案,我在数组PDO::MYSQL_ATTR_INIT_COMMAND=>“SET NAMES latin1”中添加了这一行,但他们说永远不要使用SET NAMES。现在我已经解决了这个问题,但我知道我的应用程序不是安全退出的,讽刺的是,这是更改数据库连接方法的主要原因。我的问题现在已经解决了,但我真的很想与大家分享,我想提供更多信息,以防其他人也有同样的问题。我的表列的排序规则是COLLATE=utf8\u unicode\u ci,我在其他表中使用不同的排序规则,我正在测试此指令是否造成不兼容,我需要使用PDO方法更新30个查询,让我们看看。
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;
}