Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Serialisiertes Array in MySQL aktualisieren (ohne Deserialisieren?)

Wenn Sie einfach so suchen und ersetzen, werden die serialisierten Daten unbrauchbar. Folgendes müssen Sie tun:

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

Ersetzen Sie $old und $new Führen Sie mit Ihrer aktuellen URL und der Ziel-URL das Skript aus und führen Sie die generierte $query aus .

Hier ist eine reine SQL-Lösung:

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

Beachten Sie, dass dadurch JEDES Vorkommen der Suchzeichenfolge in Ihrem serialisierten Array ersetzt wird. Wenn Sie einen bestimmten Schlüssel ersetzen möchten, müssen Sie genauer, huh, genauer sein.