2011-03-03 5 views
3

J'utilise un script classifié et enregistre les données user_meta dans la table wp_usermeta. Le champ meta_key est appelé user_address_info et il y a toutes les données comme ci-dessous:Unserialize values ​​from mySQL

s:204:"a:7:{s:9:"user_add1";s:10:"my address";s:9:"user_add2";N;s:9:"user_city";s:7:"my city";s:10:"user_state";s:8:"my phone";s:12:"user_country";N;s:15:"user_postalcode";s:10:"comp phone";s:10:"user_phone";N;}"; 

Je n'utilise pas tous les champs sur le script, mais user_add1, user_city, USER_STATE et user_postalcode

J'ai la difficulté d'obtenir les données en utilisant SQL comme dans l'exemple ci-dessous (wordpress):

$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_A); 

Je voudrais un peu d'aide ici pour que je manifesterai partout (je ne vous dérange pas d'utiliser tout type de requêtes SQL) les informations demandées par exemple le user_city d'identité en cours d'auteur (par exemple 25)

m'a donné l'exemple suivant, mais je veux quelque chose de dynamique

<?php 
$s = 's:204:"a:7:{s:9:"user_add1";s:10:"my address";s:9:"user_add2";N;s:9:"user_city";s:7:"my city";s:10:"user_state";s:8:"my phone";s:12:"user_country";N;s:15:"user_postalcode";s:10:"comp phone";s:10:"user_phone";N;}"'; 
$u = unserialize($s); 
$u2 = unserialize($u); 
foreach ($u2 as $key => $value) { 
    echo "<br />$key == $value"; 
} 
?> 

Merci beaucoup.

Répondre

5

Non, vous ne pouvez pas utiliser SQL pour désérialiser.
C'est pourquoi le stockage des données sérialisés dans une base de données est une très mauvaise idée

Et deux fois plus mauvais est en train de faire sérialisation deux fois. Donc, vous n'avez rien mais utilisez le code que vous avez donné.
Je n'y vois pas beaucoup d'électricité statique.
rencontrez-vous un problème avec cela?
Ou vous voulez juste réparer quelque chose mais vous ne savez pas quoi réparer? Débarrassez-vous de la sérialisation puis

0

J'ai trouvé que la valeur de sérialisation stockée dans la base de données est convertie dans un autre format. Étant donné que le magasin de données sérialisé donne des guillemets, un point-virgule, un crochet de culry, le mysql doit être sauvegardé seul, donc il met automatiquement "backslash()" qui vient de gpc_magic_quotes (CMIIW). Donc, si vous stockez une série de données et que vous vouliez l'utiliser, dans l'interface, vous devriez utiliser html_entity_decode() pour vous assurer que vous avez le format réel lu par PHP.

ici était mon exemple:

$ser = $data->serialization; // assume it is the serialization data from database 
$arr_ser = unserialize(html_entity_decode($ser)); 

nb: je l'ai essayer et il fonctionne et assurez-vous éviter ce type à être stockées dans des tables (à risque). de cette façon peut résoudre le format json stocké dans la table aussi.