問題描述
我正在使用 MySQL 和 PHP 5.3 并嘗試了此代碼.
I am using MySQL and PHP 5.3 and tried this code.
$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 渲染顯示,做得很好.
=> I got good UTF-8 render display, well done.
但現在我創建了一個類 PDO 以保持易于擴展和更容易
But for now I create a class PDO to keep easy to extend and more easy
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 />';
}
?>
但它顯示我的角色是這樣的'????'
But it displays my character something like this '????'
我在 Stack Overflow 上找到了這個鏈接,看起來和我遇到的問題一樣PHP/MySQL 中的特殊字符
I found this link on Stack Overflow, it looks like the same problem i met Special characters in PHP / MySQL
它看起來和我的問題一樣 => 我試圖修復它,但我仍然無法工作.
It looks the same as my problem => I tried to fix it, but I still doesn't work.
$this->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAME'utf8'");
誰能告訴我是什么問題?我該如何糾正?
Can anyone tell me what the problem is? How can I correct it?
謝謝
推薦答案
你缺少一個S:它是 SET NAMES
而不是 SET NAME
:
$this->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
你當然也需要取消注釋.另外,PDO::MYSQL_ATTR_INIT_COMMAND
可以不設置與PDO::setAttribute()
建立數據庫連接后(常量名說明了一切),您必須指定它在 constructor 中使用 $driver_options
參數,例如這個:
You also need to un-comment it of course. Also, PDO::MYSQL_ATTR_INIT_COMMAND
can not be set with PDO::setAttribute()
after you've established your database connection (the constant name says it all), you've to specify it in the constructor using the $driver_options
argument, like this:
$this->db = new PDO($this->dsn, $this->username, $this->password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
另一種方法是在連接后立即執行相同的查詢:
An alternative to this is to just execute that very same query immediately after connecting:
$this->db = new PDO($this->dsn, $this->username, $this->password);
$this->db->exec("SET NAMES 'utf8';");
這篇關于PHP/MySQL 中的 PDO 和 UTF-8 特殊字符?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!