sql >> Databáze >  >> RDS >> Mysql

Aktualizace serializovaného pole v mysql (bez zrušení serializace?)

Pokud budete takto jednoduše hledat a nahrazovat, učiníte serializovaná data nepoužitelnými. Zde je to, co musíte udělat:

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

Nahraďte $old a $new s vaší aktuální a cílovou adresou URL, spusťte skript a spusťte vygenerovaný $query .

Zde je čisté řešení 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, '"'));

Všimněte si, že to nahradí KAŽDÝ výskyt hledaného řetězce ve vašem serializovaném poli. Pokud chcete nahradit konkrétní klíč, musíte být více, no, konkrétnější.



  1. Jak funguje REGEXP_REPLACE() v MariaDB

  2. Hromadné vkládání PHP foreach

  3. ORA - 00933 záměna s vnitřním spojem a as

  4. Rozdělení Datetime na hodnotu data a času