2010-01-16 3 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:" версия "; s: 3:" 1.0 ";}

Что случилось с символами и буквами? Например, я предполагаю s: 9: «max_inbox» относится к строке из девяти символов, а строка - 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, например, и также похож на стиль систем хранения NoSQL, таких как MongoDB. Я предпочитаю использовать JSON поверх сериализации PHP.

+1

Да, это символ новой строки, который вы скопировали из вопроса OP. Как раз перед «email_add» ;-) –

+0

Спасибо, теперь я вижу, что в CLI PHP, который просто показывался как пространство. Я буду обновлять с расшифрованной информацией! – JAL

+0

спасибо за помощь. И да, жаль насчет разрыва строки. Это помогает мне в правильном направлении. Если бы я мог оценить вас обоих, я бы! – infinity2k9

4

Я считаю, что это строка, которая генерируется функцией сериализации PHP. Эта функция позволяет вам представлять (сложный) объект или массив в виде строки.

Кроме того, я думаю, что номера, на которые вы ссылаетесь, вероятно, необходимы для того, чтобы сделать токенизацию (не уверен, что это подходящий термин здесь), строка обратно к соответствующим разделам. Не думая, что это означает, что он предназначен для обхода ситуаций, когда токенизатор может заглушить фактические значения сериализованного объекта, которые содержат разделители (:; ").

+1

большое спасибо за ответ. Кто знает, как долго будущий программист, как я, потратил бы на это, чтобы понять, как выглядели сериализованные данные :). Я ценю это! – infinity2k9

Смежные вопросы