Замена подстроки в сериализованных данных БД

Наступив на заботливо подложенные авторами грабли в виде хранения путей к изображениям в абсолютном виде (http://...) — исправляем данные в БД. Просто замена подстроки в поле таблицы не вызывает трудностей, а вот внести исправления в сериализованные данные при помощи одного только phpmyadmin не получится. Функция на примере таблицы prefix_topic_content и поля topic_extra.
    public function RecalculateTopicExtra($search, $replace) {
        $upcount = 0;
        $sql = "SELECT topic_id, topic_extra FROM prefix_topic_content";
        $aRows = $this->oDb->select($sql);
        if($aRows = $this->oDb->select($sql))
        {
            foreach($aRows as $aRow)
            {
                $topic_id = $aRow['topic_id'];
                $topic_extra = str_replace($search, $replace, unserialize($aRow['topic_extra']), $rcount);
                if ($rcount > 0)
                {
                    $sql = "UPDATE prefix_topic_content SET topic_extra = '" . serialize($topic_extra) . "' WHERE topic_id = " . $topic_id;
                    $this->oDb->query($sql);
                    $upcount++;
                }
            }
        }
        return $upcount;
    }

Похожие статьи

  • Локальные URL - грабли №2
    Вступив не неблагодарный путь работы с локальными URL (URL в рамках данного хоста без http://hostname/) я ошибочно полагал что все проблемы закончатся на исправлении данных в БД (здесь я типа обратился к сайдбару, в...
  • MySQL replace serialized data (Замена сериализованных данных в MySQL)
    Когда-то мне понадобилось поковыряться в стерилизованных данных AltoCMS. В тот раз я набросал костыль в админку на php. Теперь, после перехода на https, опять столкнулся с проблемой URL'ов — в БД повсеместно URL ...

0 комментариев

Автор статьи запретил добавлять комментарии