gpt4 book ai didi

php - PHP/MySQL 中的 PDO 和 UTF-8 特殊字符?

转载 作者:IT王子 更新时间:2023-10-29 00:07:43 24 4
gpt4 key购买 nike

我正在使用 MySQL 和 PHP 5.3 并尝试了这段代码。

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$con = mysql_connect("localhost", "root", "");
mysql_set_charset('utf8');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("kdict", $con);
$sql = "SELECT * FROM `en-kh` where english='a'";
echo $sql;
$result = mysql_query($sql);

while($row = mysql_fetch_array($result))
{
echo $row['english'] . " </br> " . $row['khmer'];
echo "<br />";
}
?>

=> 我得到了很好的 UTF-8 渲染显示,干得好。

但现在我创建了一个类 PDO 以保持易于扩展和更容易

 class crud {
// code..
public function conn()
{
isset($this->username);
isset($this->password);
if (!$this->db instanceof PDO)
{
$this->db = new PDO($this->dsn, $this->username, $this->password);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
}
}
/*more code here*/
}



/*** a new crud object ***/
$crud = new crud();
/*** The DSN ***/
$crud->dsn = "mysql:dbname=kdict;host=localhost";

/*** MySQL username and password ***/
$crud->username = 'root';
$crud->password = '';
/*** select all records from table ***/
$records = $crud->rawSelect("SELECT * FROM `en-kh` where english='a'");

/*** fetch only associative array of values ***/
$rows = $records->fetchAll(PDO::FETCH_ASSOC);

/*** display the records ***/
foreach($rows as $row)
{
foreach($row as $fieldname=>$value)
{
echo $fieldname.' = '.$value.'<br />';
}
echo '<hr />';
}
?>

但它显示我的角色是这样的'????'

我在 Stack Overflow 上找到了这个链接,看起来和我遇到的问题一样 Special characters in PHP / MySQL

它看起来和我的问题一样 => 我试图修复它,但我仍然没有工作。

$this->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAME'utf8'");

谁能告诉我问题出在哪里?我该如何纠正它?

谢谢

最佳答案

您缺少一个S:it's SET NAMES而不是 SET NAME:

$this->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

当然,您还需要取消注释。此外,PDO::MYSQL_ATTR_INIT_COMMAND can not be setPDO::setAttribute()建立数据库连接后(常量名称说明了一切),您必须在 constructor 中指定它使用 $driver_options 参数,像这样:

$this->db = new PDO($this->dsn, $this->username, $this->password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));

另一种方法是在连接后立即执行相同的查询:

$this->db = new PDO($this->dsn, $this->username, $this->password);
$this->db->exec("SET NAMES 'utf8';");

关于php - PHP/MySQL 中的 PDO 和 UTF-8 特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com