3

In Drupal, I first serialized emails that appear in the body of private messages and stored them is MySQL like this:

function prvtmsg_list($body) { $notify = array(); if (isset($body->emails)) { $notify['mid'] = $body->mid; $notify['emails'] = serialize($body->emails); } if (isset($body->vulgar_words) { $notify['mid'] = $body->mid; $notify['vulgar_words'] = serialize($message->vulgar_words); } if (isset($notify['mid'])) { drupal_write_record('prvtmsg_notify', $notify); } } 

When I later try to retrieve them, email userialization fails, I retrieve them like this:

function prvtmsg_list_notify() { // Select fields from prvtmsg_notify and Drupal pm_message tables $query = db_select('prvtmsg_notify', 'n'); $query->leftJoin('pm_message', 'm', 'n.mid = m.mid'); $query->fields('n', array('mid', 'emails', 'vulgar_words')); $query->fields('m', array('mid', 'author', 'subject', 'body', 'timestamp')); orderBy('timestamp', 'DESC'); $query = $query->extend('PagerDefault')->limit(20); $result = $query->execute()->fetchAll(); $rows = array(); foreach ($result as $notify) { $rows[] = array( $notify->author, $notify->subject, implode(', ', unserialize($notify->emails)), implode(', ', unserialize($notify->vulgar_words)), ); } $build = array(); $build['table'] = array( '#theme' => 'table', '#header' => array( t('Author'), t('Message subject'), t('Emails captured'), t('Vulgar Words Captured'), ), '#rows' => $rows, ); $build['pager']['#theme'] = 'pager'; return $build; 

}

Maybe the way I serialized the emails is wrong? because:

dpm(unserialize($notify->emails); 

gives Array, Array, Array - which means:

Array( [0] => Array() [1] => Array() [2] => Array() [3] => Array() )

Surprisingly, the unserialized vulgar words are showing okay! I'm not sure is it possible to serialize the emails like this:

$notify['emails'] = serialize (array($body->emails)); 

I faced the exact situation in the past where unserialization did not work for me, there is something not clear to me and I need to learn it. Could anyone confirm or tell me what's wrong?

N.B. The above code is from memory and may not be accurate as I currently don't have access to it.

1 Answer 1

1

if i am reading this correctly you are writing an array into a db

drupal_write_record('prvtmsg_notify', $notify); 

should be:

drupal_write_record('prvtmsg_notify', serialize($notify)); 

you will most likely no longer need

$notify['emails'] = serialize($body->emails); 

and can instead write:

$notify['emails'] = $body->emails; 

after retrieving it from the db you can unserialize the array and iterate over it ex:

$array = unserialize(someFunctionToGetPrvtmsg_notifyFromTheDb()); //the array should be the same as the one you serialized 
Sign up to request clarification or add additional context in comments.

2 Comments

thank you. the $notify array holds the mid, emails, and also other things not shown in the code which will be inserted in multiple fields. I will edit my question to make it clear.
the $notify array holds things other than the emails which don't need to be serialized.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.