Zoals anderen al hebben vermeld, kunt u dit niet doen in MySQL. Dit lijkt echter een eenmalige bewerking te zijn die u moet doen, dus heb ik u een snel en vies klein php-script geschreven om het werk te doen. Het gaat ervan uit dat uw node_revisions-tabel een primaire sleutelkolom heeft met de naam 'id'. Zo niet, bewerk deze dan op de juiste manier. Vergeet ook niet om de databasehost, gebruikersnaam, wachtwoord en databasenaam bovenaan het script aan te passen aan uw configuratie.
<?php
$host = '127.0.0.1';
$username = 'root';
$password = 'password';
$database = 'test';
$conn = mysql_connect($host, $username, $password);
if (!$conn) {
echo "Unable to connect to DB: " . mysql_error();
exit;
}
if (!mysql_select_db($database)) {
echo "Unable to select " . $database . ": " . mysql_error();
exit;
}
$sql = "SELECT * FROM node_revisions";
$result = mysql_query($sql);
if (!$result) {
echo "Could not successfully run query ($sql) from DB: " . mysql_error();
exit;
}
if (mysql_num_rows($result) == 0) {
echo "No rows found, nothing to print so am exiting";
exit;
}
while ($row = mysql_fetch_assoc($result)) {
$id = $row['id'];
$body = $row['body'];
$teaser = $row['teaser'];
$body = preg_replace('/http:\/\/.*?\.pdf/', '/migration-update', $body);
$teaser = preg_replace('/http:\/\/.*?\.pdf/', '/migration-update', $teaser);
$sql = "UPDATE node_revisions set body='" . mysql_real_escape_string($body) . "', teaser='" . mysql_real_escape_string($teaser) . "' where id=" . $id;
mysql_query($sql);
}
mysql_free_result($result);
mysql_close($conn);
?>
Merk ook op dat ik een niet-greedy modifier op de reguliere expressies heb gebruikt, zodat als je meerdere pdf-urls in een body- of teaserveld hebt, je niet alles ertussenin kwijtraakt.