Mysql 正确的pdo连接以使用重音符号

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字符集,网页运行良好,显示带有重音的单词 我知道

嗨,我在PDO连接上显示口音时遇到问题。 我正在学习php的web开发,我开始使用mysql旧的php连接进行开发

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;
}