2016-07-13 8 views
0

Zunächst tut mir leid, wenn dies eine dumme Frage scheint. Ich bin neu mit diesem Befehl "unserialize" und ich habe viele Informationen darüber gelesen, aber ich weiß immer noch nicht wirklich, wie ich es implementieren soll, um zu bekommen, was ich brauche.Bedingte PHP-UNSerialize-Funktion

Lassen Sie mich erklären, was ich jetzt habe, und was brauche ich.

Ich habe diesen Code jetzt:

$consultametacat = $wpdb->get_row(" 
    SELECT post_id, 
      meta_key, 
      meta_value 
     FROM cg_postmeta 
    WHERE post_id = '".$consultapost->ID."' 
     AND meta_key LIKE '_category_permalink' 
    ", 
    ARRAY_A 
); 

Das spart die Ergebnisse dieser Abfrage an die Datenbank in ARRAY_A

Dann bekomme ich diesen Wert auf andere Zeilen wie diese:

$category_color = get_tax_meta($consultametacat['meta_value'],'pm_color_field_id'); 
$category_name = get_term_by('id', $consultametacat['meta_value'], 'category',ARRAY_A); 
$category_name = get_term_by('id', $consultametacat['meta_value'], 'category',ARRAY_A); 
$category_link=get_category_link($consultametacat['meta_value']); 

Es hat bisher gut funktioniert, denn der meta_value war bis vor zwei Wochen eine ganze Zahl. Nun, alte Einträge in „_category_permalink“ Feld in der Datenbank hat ganze Zahlen, aber neue Einträge haben serialisierten Daten wie folgt aus:

a:1:{s:8:"category";s:2:"23";} 

Also, was ich tun müssen, ist einen Zustand versetzen und unserialize nach dieser Bedingung , um immer eine Ganzzahl zu erhalten. Die Logik wird wie folgt sein:

-wenn die Ergebnisse für

$consultametacat = $wpdb->get_row(" 
    SELECT post_id, 
      meta_key, 
      meta_value 
     FROM cg_postmeta 
     WHERE post_id = '".$consultapost->ID."' 
     AND meta_key 
     LIKE '_category_permalink' 
    ", 
    ARRAY_A 
); 

eine ganze Zahl ist, dann in der Regel diesen Wert speichern. Wenn es aber zu einer serialisierten Zeile führt, dann wird unserialisiert, der numerische Wert erhalten (in meinem Beispiel die 23 aus der Zeile a: 1: {s: 8: "Kategorie"; s: 2: "23";}) und Speichere diesen numerischen Wert.

Wie erreichen?

Vielen Dank für Ihre Hilfe im Voraus.

Antwort

0

Sie müssen erkennen zunächst, dass Ihr Ergebnis serialisiert und dann darum kümmern, wenn nicht mehr, nichts zu tun ist:

if(strpos($consultametacat,':{')!==false){ 
    $consultametacat = unserialize($consultametacat); 
    $consultametacat = array_shift($consultametacat);//or = $consultametacat['category']; 
} 

strpos() erkennt :{ in $consultametacat und gibt seine Position und jede serialisierten Daten hat dieser Teil darin. Aber serialize() kann auch Objekte und andere Arten serialisieren, so forschen Sie selbst ein wenig mehr zu diesem Thema.

+0

Vielen Dank, JOUM! Dies ist der Code, der den Trick gemacht hat: if (strpos ($ consultametacat ['meta_wert'], ': {')! == false) { $ consultametacat = unserialize ($ consultatematacat ['meta_value']); $ consultatematacat ['meta_wert'] = $ consultametacat ['category']; } – Shinji3rd