Mysql
 sql >> Database >  >> RDS >> Mysql

Aggiornamento dell'array serializzato in mysql (senza annullare la serializzazione?)

Se cerchi e sostituisci semplicemente in questo modo, renderai i dati serializzati inabilitati. Ecco cosa devi fare:

$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}');";

Sostituisci $old e $new con i tuoi URL attuali e di destinazione, esegui lo script ed esegui la $query generata .

Ecco una pura soluzione SQL:

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, '"'));

Nota che questo sostituirà OGNI occorrenza della stringa di ricerca nell'array serializzato. Se stai cercando di sostituire una chiave specifica, devi essere più, eh, specifico.