2010-01-16 12 views
1

對不起,這種奇怪/模糊的問題:)。我現在幾次遇到過這種存儲在MySQL數據庫中的格式,我想知道數據是如何使用的?例如,這行代碼來自bbPress論壇插件bb_message。PHP/MySQL formatinng:如何使用這種類型的數據的例子?

a:8:{s:9:「max_inbox」; i:50; s:13:「auto_add_link」; b:1; s:9:「email_new」; b:1; s:11:「 email_reply「; b:1; s:9: 」email_add「; b:1; s:13:」email_message「; b:0; s:16:」threads_per_page「; i:0; s:7:」version 「; s:3:」1.0「;}

這是什麼字符和字母?例如,我猜s:9:「max_inbox」是指一個由9個字符組成的字符串,字符串是max_inbox。但是當數據從數據庫中提取時,這些數據如何用PHP操作(爲什麼s:9是必須的)?

謝謝大家!

回答

3

使用PHP的unserialize函數來解碼字符串。

unserialize PHP文檔

此字符串解碼此數組像這樣:

php > $f='a:8:{s:9:"max_inbox";i:50;s:13:"auto_add_link";b:1;s:9:"email_new";b:1;s:11:"email_reply";b:1;s:9:"email_add";b:1;s:13:"email_message";b:0;s:16:"threads_per_page";i:0;s:7:"version";s:3:"1.0";}'; 
php > var_dump(unserialize($f)); 
array(8) { 
["max_inbox"]=> 
int(50) 
["auto_add_link"]=> 
bool(true) 
["email_new"]=> 
bool(true) 
["email_reply"]=> 
bool(true) 
["email_add"]=> 
bool(true) 
["email_message"]=> 
bool(false) 
["threads_per_page"]=> 
int(0) 
["version"]=> 
string(3) "1.0" 
} 

原因存儲這樣的數據,你可以含多處存儲一個數據庫字段中的e參數。

存儲序列化數組可以讓您不用擔心數據庫的模式。 Friendfeed以MySQL爲例,它與MongoDB等'NoSQL'存儲系統的風格類似。我比較喜歡在PHP上使用JSON序列化。

+1

是的,這是你從OP的問題中複製的換行符。就在「email_add」之前;-) – 2010-01-16 01:11:13

+0

謝謝,我現在看到在PHP CLI中,它剛剛顯示爲空格。我會更新解碼信息! – JAL 2010-01-16 01:41:37

+0

感謝您的幫助。對於換行符,對不起:)這有助於我朝正確的方向發展。如果我能評價你們兩個,我會! – infinity2k9 2010-01-16 04:01:19

4

我相信這是一個由PHP的序列化函數生成的字符串。此函數使您能夠將(複雜)對象或數組表示爲字符串。

此外,我認爲您提到的數字可能需要進行標記化(不確定這是否是適當的術語),字符串回到相關的部分更容易。沒有經過太多考慮,我認爲這是爲了規避標記器可能窒礙包含分隔符(:「)的序列化對象的實際值的情況。

+1

非常感謝你的回覆。誰知道像我這樣的新手程序員花了多長時間試圖弄清楚這就是序列化數據的樣子:)。我很感激! – infinity2k9 2010-01-16 03:59:43

相關問題