sql >> Base de Datos >  >> RDS >> Mysql

Actualización de matriz serializada en mysql (¿sin deserializar?)

Si simplemente busca y reemplaza de esa manera, hará que los datos serializados no se puedan ver. Esto es lo que debe hacer:

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

Reemplazar $old y $new con su URL actual y de destino, ejecute el script y ejecute el $query generado .

Aquí hay una solución 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, '"'));

Tenga en cuenta que esto reemplazará CADA ocurrencia de la cadena de búsqueda en su matriz serializada. Si está buscando reemplazar una tecla específica, tiene que ser más, eh, específico.