Bu veritabanında tefrika sakladıktan sonra nesneyi unserialize olamaz

3 Cevap php

Burada karmaşık bir nesne saklamak için çalışıyorum ve yapıyorum bunun üzerinde bir mysql_real_escape_string çalışan ve bir mysql veritabanına takarak nesneyi serialising tarafından.

Ancak ben bir sql sorgusu çalıştırarak onu almak zaman - I Zend_DB_Table burada ama yine de Zend çerçeveler kullanıyorum - ve ben stripslashes çalışın ve unserialize zaman ben geri benim nesne alamadım. Ben bölü sıyırma olmadan sadece unserialize denedim ve tüm ama sözler çalışıyor.


UPDATE

Bu çok tuhaf. Ben sadece bir tefrika nesnesi unserializes basit bir sayfa yaptı. Ben veritabanından alınır gibi tefrika dize almak ve sadece unserialize() üzerinde olduğu bu diğer sayfada yoluyla unserialize ise - o mükemmel çalışıyor ve benim nesneyi geri almak. Ancak dize retriving ve ben onun değil çalışma, orada aynı unserialize seçeneğini çalıştırın ironik kodu!

Yani temelde dizgeleştirilmiş ile yanlış bir şey var - bazı garip nedenle benim uygulamasında unserialize olmaz ama o hiçbir mantıklı, başka bir yerde unserializes.

3 Cevap

Muhtemelen ilk base64 kodlama aracılığıyla çalıştırmak gerekir:

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

Sonra bunu geri almak için:

$date = unserialize(base64_decode($safe_string_to_store));

Bunu deneyin ve eğer çalışırsa bize bildirin.

(Ve üzerinde çalışan stripslashes - dont için gerek yoktur)

Sen stripslashes üzerinde çalıştırmak gerekir - veritabanı size unserialize içine koymak doğru dize geri verecektir.

Doğru görünüyor - bunu unserialize önce bildirimler dize açık ve yankı var emin olun?

Sadece aşağıdakileri yapmanız gerekir:

MyTable Zend_Db_Table_Abstract sizin örneğidir varsayarsak:

$t = new MyTable();
$n = $t->createRow();
$n->serializedfield = serialize($data);
$n->save();

ve Zend DB sizin için kaçan ilgilenelim.

Eğer üzerinden yapıyor iseniz insert(), sen de bir şey yapmak gerekmez (yukarıda kullandığı insert())

Aksi $db->quoteInto() gibi kullanabilirsiniz

$db->quoteInto('INSERT INTO mytable (serializedfield) values (?)', serialize($data));