Php serialize

4 Cevap php

Benim MySQL veritabanı içine tefrika diziler kurtarmaya çalışırken Im sonra onları alınamadı ve onları unserilize ama onları nesneleştirmek nasıl çalışmak olamaz. Burada ben bugüne kadar ne var:

$query = mysql_query("SELECT friends FROM users WHERE id='$myid'");
$friends = mysql_fetch_array($query);

unserialize($friends);

Buraya takıldınız???

array_push($friends, $id);
$friendsUpdated = serialize($friends);

mysql_query("UPDATE users SET friends='$friendsUpdated' WHERE id='$myid'");

4 Cevap

mysql_fetch_array bir dizi döndürür, böylece istediğiniz dizinin bit seçmek gerekir:

$row = mysql_fetch_array($query);

$data=unserialize($row['friends']);

Ayrıca, çok hatalar örneğin kontrol alışkanlığı içine almak gerekir

$result = mysql_query("SELECT friends FROM users WHERE id='$myid'");
if ($result) 
{
    if ($row = mysql_fetch_array($result))
    {
         $data=unserialize($row['friends']);

    }
    else
    {
         //empty result, set up empty data?
         $data=array();
    }

} 
else 
{
    die('Invalid query: ' . mysql_error());
}

Manuel dediği gibi:

mysql_fetch_array — Fetch a result row as an associative array, a numeric array, or both

ve:

unserialize() takes a single serialized variable and converts it back into a PHP value. [...] The converted value is returned

Yani kod bu gibi görünmelidir:

$query = mysql_query("SELECT friends FROM users WHERE id='$myid'");
$row = mysql_fetch_array($query);

$friends = unserialize($row[0]);

DB gider tüm değişkenler için lütfen always kaçış kullanıcı girişi sorguları veya enjeksiyon SQL için bir kapı açma riski: (aynı bu girdi yanı sıra aldı durumda $ MyID için, siz kontrol edin eğer kullanıcı veri satırı işlemek için izin verildiği takdirde)

mysql_query("UPDATE users SET friends='".mysql_real_escape_string($friendsUpdated)."' WHERE id='$myid'");

Lütfen tarayıcılarda (HTML enjeksiyon / XSS önlemek için) bir şey yankılanıyordu için aynı: html_entities($output)

mysql_fetch_array() bir dizi döndürür olduğundan, unserialize() doğrudan geçemez. Yerine

unserialize($friends);

Eğer dizideki ilk öğe kullanmanız gerekir:

if (isset($friends[0])) {
  $friendsDataArray = unserialize($friends[0]);
} else {
  // not found.
}

İşte yapmanız gerekenler:

$query = mysql_query("SELECT friends FROM users WHERE id='$myid'");
$friendsFromDatabase = mysql_fetch_array($query);
$friends = unserialize($friendsFromDatabase[0]);

Yani sadece bir değişken içine unserialize sonucunu kapmak.