2014-10-29 3 views
0

Когда я использую средство администрирования для LimeSurvey для добавления дополнительного поля в мой опрос, поле attributedescriptions в базе данных выглядит следующим образом:LimeSurvey использует строку JSON из базы данных

a:1: 
{ 
    s:11:"attribute_1"; 
    a:4: 
    { 
     s:11:"description"; 
     s:4:"Unit"; 
     s:9:"mandatory"; 
     s:1:"N"; 
     s:13:"show_register"; 
     s:1:"N"; 
     s:7:"cpdbmap"; 
     s:0:""; 
    } 
} 

При вводе другого поля в базе данных выглядят следующим образом:

a:2: 
{ 
    s:11:"attribute_1"; 
    a:4: 
    { 
     s:11:"description"; 
     s:4:"Unit"; 
     s:9:"mandatory"; 
     s:1:"N"; 
     s:13:"show_register"; 
     s:1:"N"; 
     s:7:"cpdbmap"; 
     s:0:""; 
    } 

    s:11:"attribute_2"; 
    a:4: 
    { 
     s:11:"description"; 
     s:9:"Something"; 
     s:9:"mandatory"; 
     s:1:"N"; 
     s:13:"show_register"; 
     s:1:"N"; 
     s:7:"cpdbmap"; 
     s:0:""; 
    } 
} 

я теперь нужен динамический способ получить слова «Unit» и «Something» в массив, который я могу использовать.

Это мой код, чтобы получить строку json;

$sql = $dbh->prepare($sql); 
$sql->execute(); 
$result = $sql->fetchAll(PDO::FETCH_ASSOC); 

print $result[0]["attributedescriptions"]; 

Я ужасен в PDO. Я пытался;

$result = var_dump(json_decode($result[0]["attributedescriptions"], true); 

$result = var_dump(json_decode($result["attributedescriptions"], true); 

$result = var_dump(json_decode($result[0], true); 

Я получаю сообщение об ошибке;

Warning: json_decode() expects parameter 1 to be string, array given in /var/www/html/surveys/survey-admin/functions/functions.php on line 189 NULL 
+0

Это не JSON, это похоже на PHP-'serialize() 'ed data. Используйте 'unserialize()' вместо 'json_decode()' и повторите попытку: P – Wrikken

ответ

1

Это не JSON, это сериализации данные:

сериализации:

$serialized_data = base64_encode(serialize($data)); 

десериализации:

$unserialized_data = unserialize(base64_decode($serialized_data)); 

base64_encode() используется для предотвращения повреждения, если данные повреждены. unserialize() вернет false.

+0

Итак, когда я делаю unserialize ($ result [0] ['attribitedescriptions']); Я получаю массив. Но если я также использую base64_decode(), он просто возвращает пустое. Даже пустой массив. – mikelovelyuk

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