Wie ersetze ich eine Zeichenfolge in einer (kompletten) MySQL-Datenbank ?

Wie ersetze ich eine Zeichenfolge in einer (kompletten) MySQL-Datenbank ?

… ganz einfach mit folgenden PHP-Skripts:

  1. in eine einzelnen Tabelle:
<?php

$db_name="datenbankname";
$db_host="localhost";
$db_user="datenbankbenutzer";
$db_pass="datenbankpasswort";

$tabellenname="tabelle";

$replace="dasalteschwarz";
$replace_mit="dasneueorange";


// -------------- LOS GEHTS !

error_reporting(-1);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
	
$db = mysqli_connect ($db_host,$db_user,$db_pass) or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");

mysqli_select_db($db,$db_name) or die ("Die Datenbank existiert nicht.");


$query="UPDATE tabelle SET post_content = REPLACE(post_content, \"".$replace."\", \"".$replace_mit."\")";
mysqli_query($db,$query) or die ("Fehler : $query");

echo "Die Zeichenolge '".$replace."' wurde ".mysqli_affected_rows($db)." x gefunden ...<br>";
echo "...und durch die Zeichenfolge '".$replace_mit."' ersetzt.<hr>";

$abfrage = "SELECT * FROM tabelle LIMIT 0,20";
$ergebnis = mysqli_query($db,$abfrage);
while($row = mysqli_fetch_array($ergebnis))
   {
		echo $row["ID"]."<br>";
		echo $row["post_content"]."<p>";
   }

mysqli_close($db);
?>

oder

2. in einer kompletten Datenbank (alle darin enthaltenen Tabellen):

<?php
// Database credentials
$strHost = 'localhost';
$strUser = 'datenbankbenutzer';
$strPassword = 'datenbankpasswort';
$strDatabase = 'DATENBANKNAME';

// From and to path
$strFrom = 'dasalteschwarz';
$strTo = 'dasneueorange';

// DO NOT EDIT ANYTHING BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING!

error_reporting(E_ALL ^ E_NOTICE);

function array_strpos($arrHaystack, $strNeedle)
{
foreach ($arrHaystack as $v)
{
if (is_object($v))
{
$v = get_object_vars($v);
}

if (is_array($v) && array_strpos($v, $strNeedle) || !is_array($v) && strpos($v, $strNeedle) !== false)
{
return true;
}
}

return false;
}

function array_str_replace($strSearch, $strReplace, $arrData)
{
foreach ($arrData as $k=>$v)
{
if (is_array($v))
{
$arrData[$k] = array_str_replace($strSearch, $strReplace, $v);
}
elseif (is_string($v))
{
$arrData[$k] = str_replace($strSearch, $strReplace, $v);
}
}

return $arrData;
}

try
{
$db = new PDO
(
'mysql:dbname=' . $strDatabase . ';host=' . $strHost,
$strUser,
$strPassword,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'")
);

$stmt = $db->query('SHOW TABLES');
$stmt->setFetchMode(PDO::FETCH_COLUMN, 0);

foreach ($stmt as $strName)
{
$arrTables[] = $strName;
}

$intUpdates = 0;

if (substr($strFrom, -1) == '/' && substr($strTo, -1) != '/')
{
$strTo .= '/';
}
else if (substr($strFrom, -1) != '/' && substr($strTo, -1) == '/')
{
$strFrom .= '/';
}

echo 'Searching tables' . "<br>\n";

foreach ($arrTables as $strTable)
{
echo 'Processing ' . $strTable . "<br>\n";

$stmt = $db->query(sprintf('SELECT * FROM `%s`', $strTable));
$stmt->setFetchMode(PDO::FETCH_ASSOC);

foreach ($stmt as $row)
{
foreach ($row as $k=>$v)
{
$blnSerialized = false;
$tmp = unserialize($v);

if ($tmp !== false)
{
$blnSerialized = true;
$v = $tmp;
}

if ($k != 'id')
{
$w = false;

if (is_object($v))
{
$v = get_object_vars($v);
}
if (is_array($v) && array_strpos($v, $strFrom) !== false)
{
$w = array_str_replace($strFrom, $strTo, $v);
}
if (!is_array($v) && strpos($v, $strFrom) !== false)
{
$w = str_replace($strFrom, $strTo, $v);
}

if ($w)
{
if ($blnSerialized)
{
$v = $row[$k];
$w = serialize($w);
}

$stmt = $db->prepare(sprintf('UPDATE `%s` SET `%s`=:value WHERE `id`=:id', $strTable, $k));
$stmt->bindValue('value', $w);
$stmt->bindValue('id', $row['id']);
$stmt->execute();

++$intUpdates;
}
}
}
}
}

echo 'Update finished: ' . sprintf('%d rows updated', $intUpdates) . "<br>\n";
}
catch(PDOException $e)
{
var_dump($e->getMessage());
}
?>