Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Atualizando array serializado no mysql (sem desserializar?)


Se você simplesmente pesquisar e substituir assim, tornará os dados serializados inutilizáveis. Aqui está o que você precisa fazer:
$old = 'http://www.google.com';
$new = 'http://www.someplace.com';

$search = 's:' . strlen($old) .':"' . $old . '"';
$replace = 's:' . strlen($new) .':"' . $new . '"';

$query = "UPDATE config SET array=REPLACE(array, '{$search}', '{$replace}');";

Substituir $old e $new com seus URLs atuais e de destino, execute o script e execute o $query gerado .

Aqui está uma solução SQL pura:
SET @search := 'http://www.original.com';
SET @replace := 'http://www.target.com';
UPDATE config SET array=REPLACE(array, CONCAT('s:', LENGTH(@search), ':"', @search, '"'), CONCAT('s:', LENGTH(@replace), ':"', @replace, '"'));

Observe que isso substituirá TODAS as ocorrências da string de pesquisa em sua matriz serializada. Se você deseja substituir uma chave específica, precisa ser mais específico.