1

您好我在 PDO 连接上显示重音时遇到问题。我正在学习 php 一个 web 开发,我开始使用 mysql 旧 php 连接进行开发

function db_connect()
{
   $result = new mysqli('localhost', 'database', 'password', 'user'); 
   if (!$result)
     return false;
   return $result;
}

我的表格使用 latin1 和 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 

我进行了搜索,试图找到一种显示带重音符号的字母的方法,但我无法解决。

4

2 回答 2

0

我在您发布的同一链接中找到了解决方案。这个解决方案对我有用:

http://forums.devshed.com/php-faqs-stickies/938827-pdo-security-php-5-3-6-a-post2851557.html#post2851557

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;
}
于 2019-03-28T16:40:28.993 回答
-1

我的解决方案完全不同。没有任何新的 PDO 选项等等....我的问题是当我通过 phpadmin 或脚本将值填写到 db 时,总是出现这种问题。但是当我在电子表格软件中填充了db表,然后将填充的文件导入db时,问题就解决了。这些知识花了我几乎一天的时间。希望能帮助到你。对不起我的英语,我是斯洛伐克人。

于 2015-07-21T11:54:07.700 回答