2011-11-19 99 views
1

我正在嘗試使用PHP/MySQL創建一些頁面。是mysqli bind_param的罪魁禍首?無法保存特殊字符,例如€

我的數據庫表設置爲utf8_general_ci,表列也是如此。如果我使用phpmyadmin並手動插入一個頁面,我可以鍵入所有€我想要的,他們將被插入爲€。我也可以完美地展示這一點。

然而,當我試圖插入使用的mysqli的€網頁將被轉換爲â,¬

我沒有做任何形式的轉換。如果我在即將插入頁面之前回顯頁面列fiels,它仍會正確顯示€。

代碼:

$connection = new mysqli('localhost', 'root', '', 'some_db'); 

$query = 'INSERT INTO page (ID, title, content) VALUES (?, ?, ?)'; 
$params = array('iss', 'NULL', 'test title', '€ some content'); 

$stmt = $connection->prepare($query); 

call_user_func_array(array($stmt, 'bind_param'), by_ref($params)); 

$stmt->execute(); 

by_ref功能只能使一個參考,沒有別的。所有的工作都很好,只是當它沒有正確插入時,它讓我頭疼。也許它不是bind_param,而是別的。我想知道答案!

更新:

由於數字精確我想通了,我必須確保連接打算用「UTF8」。不過,我只需要在使用INSERT或UPDATE時進行設置,因爲SELECT確實給我返回了utf8的結果。希望這可以幫助別人

回答

3

PHPMyAdmin可能會明確地設置連接字符集爲UTF-8,這就是爲什麼它可能通過管理界面而不是通過腳本工作。查看mysqli::set_charset獲取更多詳細信息。

$connection->set_charset('utf8'); 

編輯

嘗試取出call_user_function:

$connection = new mysqli('localhost', 'root', '', 'some_db'); 

$query = 'INSERT INTO page (ID, title, content) VALUES (?, ?, ?)'; 
//$params = array('iss', 'NULL', 'test title', '€ some content'); 

$stmt = $connection->prepare($query); 

// Replace this 
//call_user_func_array(array($stmt, 'bind_param'), by_ref($params)); 

// With this 
$stmt->bind_param('iss', 'NULL', 'test title', '€ some content'); 

$stmt->execute(); 
+0

並不能幫助我,當我插入,但使選擇額外的怪異(即â,¬再次轉換到頁*) – Tessmore

+0

@Tessmore:嘗試'$ connection-> get_charset()'並查看當前值是什麼。 –

+0

@Tessmore:還有其他一些事情要嘗試;嘗試不使用綁定的查詢,並嘗試綁定在call_user_func_array之外。 –

相關問題