2012-06-13 25 views
1

我在php中序列化一些數組,並將它們插入到mysql TEXT列中。Mysql PDO沒有正確插入序列化的PHP數據(切斷'符號)?

某些數據被嚴重插入。 INSERT語句的一個例子,

$q = $this -> dbc -> prepare("INSERT INTO table (files) VALUES(?)"); 
$q -> execute(array(serialize($files))); 

$files陣列的strlen值小於6.5,因此沒有得到剪短,因爲最大插入到TEXT MySQL的列。

serialized($files)插入之前的數據,

string 'a:4:{s:4:"CD 1";a:20:{s:32:"01 - Can´t Talk To That Girl.mp3";i:4558470;s:22:"02 - No Pla // CONTINUES FOR SOME TIME 

$files值從數據庫抓起,

a:4:{s:4:"CD 1";a:20:{s:32:"01 - Can 

看來,它削減短的字符´,我PDO的理解是,它將準確地轉義一個準備好的查詢的所有字符?

只是要注意我的PDO連接設置爲UTF-8

我該如何阻止這種情況發生?

感謝

編輯

我可以證實這是由於設置爲UTF-8,爲什麼會PDO像任何想法的連接?

+0

每個UTF-8字符最多可能需要3個字節http://stackoverflow.com/a/4420195/329062 – Greg

回答

0

試着不要深入編碼兔孔的字符;你確保你的字符串有更多的運氣是UTF-8:

$q = $this -> dbc -> prepare("INSERT INTO table (files) VALUES(?)"); 
$q -> execute(array(utf8_encode(serialize($files)))); 
1

PHP中的「'」反引號字符是系統(「反引號之間的文本」)

看到manual

快捷方式

您需要檢查它是否正確引用或轉義。