2014-01-30 76 views
0

我只是對PDO感到困惑。這是正確的形式寫這樣的函數爲set屬性字符集utf8和處理數據庫錯誤?PHP PDO setAttribute和錯誤處理

<?php 
$dsn = 'mysql:dbname=testdb;host=127.0.0.1'; 
$user = 'dbuser'; 
$password = 'dbpass'; 

try { 
    $dbh = new PDO($dsn, $user, $password array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
} 
?> 

謝謝。

+0

剛剛看到接受的答案。如果你得到一個解析錯誤,不要浪費大家的時間省略這一點,要求完全無關的東西。 –

+0

這個問題似乎是題外話,因爲它是關於一個簡單的語法錯誤。 – fancyPants

+0

@ÁlvaroG.Vicario,的FancyPants我的朋友,我真的搞不清楚這個功能。這不是關於解析錯誤。現在我開始更好地意識到PDO是如何工作的。謝謝你的時間。 –

回答

2

你做了什麼,除了簡單的語法錯誤恰到好處。您錯過了逗號

$dbh = new PDO($dsn, $user, $password ,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); 
            //^----- You missed adding this 
1

試試這個

$link = new PDO("mysql:host=localhost;dbname=DB;charset=UTF8"); 

或者,這是很好的,以及

link = new PDO('mysql:host=myhost;dbname=mydb', 'login', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'')); 

其他一切正常。

1

你設置編碼方式只在舊PHP安裝建議(早於PHP/5.3.6),但不老,我不記得確切的版本,但你必須運行SET NAMES在真正舊​​版本中手動查詢,其中PDO::MYSQL_ATTR_INIT_COMMAND尚未實現。

推薦的方法是在DSN itself適當的參數:

字符集

的字符集。有關 的更多信息,請參閱字符集概念文檔。

在PHP 5.3.6之前,這個元素被忽略了。同樣 行爲可以與 PDO::MYSQL_ATTR_INIT_COMMAND驅動程序選項可以部分複製

最後,你可以在構造函數中設置一次所有設置。有沒有必要運行一個單獨的setAttribute()電話。