Вставка в сериализованный массив в PHP - PullRequest
3 голосов
/ 28 августа 2010

Я здесь впервые, и я выдернул себе волосы, поэтому подумал, что это будет хороший первый вопрос для меня.

Я сохраняю некоторые данные массива в базе данных mysql, а затем позже использую unserialize для их редактирования. Проблема в том, что он закрывает все остальные индексы в массиве, когда я редактирую только один индекс. Вот пример кода:

foreach($post as $key => $value)  {
     if (isset($row)) {
        if ($i > 2) { $tempArray = unserialize($row[$i]); }
     }

     $tempArray[$time] = $value;

     if ($key == 'pid' || $key == 'uid') { $data[$key] = $value; }
     else { $data[$key] = serialize($tempArray); }
     $i += 1;
     unset($tempArray);
  }

Спасибо за любые идеи, которые вы можете дать.

1 Ответ

2 голосов
/ 27 августа 2011

для хранения данных сериализованного массива в MySQL, а также для извлечения и сохранения их в той же таблице, вот как вы должны это сделать.

Извлечение сериализованных данных из таблицы, десериализация их и сохранение данных массива внутри переменной. внести изменения в данные массива, используя переменную, в которой мы сохранили данные.

Мы снова сериализуем переменную с измененным массивом и обновляем поле таблицы mysql новыми сериализованными данными.

Например:

$data = array(
   "uid" => "some value",
   "pid" => "some value"
);

$store_in_database = serialize($data);
/* ...do the mysql insert query to store the new data in the field (serializedfield)... */

Теперь нужно обновить данные сериализации, хранящиеся в поле таблицы базы данных.

/ * ... извлекать строку таблицы или записи любым удобным для вас способом (одна запись или несколько) * /

foreach($db_result as $db_row){

$temp_array = $db_row['serializedfield'];
$temp_array['uid'] = "a new value";
$temp_array['pid'] = "another new value";

/* ... i wanted to add another array value */
$temp_array['akey'] = "some value";
$store_database = serialize($temp_array);
/* ... do the mysql update query to replace this new data with the old one. */
unset($temp_array);

}

Вышесказанное просто для того, чтобы дать вам идею. Я надеюсь, вы поняли, как это должно быть сделано здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...