sql >> Databasteknik >  >> RDS >> Mysql

Uppdaterar serialiserad array i mysql (utan att avserialisera?)

Om du helt enkelt söker och ersätter så, kommer du att göra den serialiserade datan osynlig. Så här behöver du göra:

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

Ersätt $old och $new med din nuvarande och mål-url, kör skriptet och kör den genererade $query .

Här är en ren SQL-lösning:

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

Observera att detta kommer att ersätta VARJE förekomst av söksträngen i din serialiserade array. Om du funderar på att ersätta en specifik nyckel måste du vara mer, va, specifik.



  1. psycopg2:infoga flera rader med en fråga

  2. Är det säkert att låta användaren ange mysql-fältet för att söka?

  3. SQLException:Ingen lämplig drivrutin hittades för jdbc:oracle:thin:@//localhost:1521/orcl

  4. När ska jag använda semikolon i SQL Server?