echo $begrüßung;
Das Escapen aller Zeichen dann, wenn sie gebraucht werden mag zwar teilweise resourcensparender sein, hat aber auch seine Nachteile und ist ein ziemlicher Aufwand, der die Lesbarkeit des PHP-Codes meiner Meinung nach doch sehr beeinträchtigt (auch, wenn es nur ein Funktionsaufruf ist).
Das letzte Argument ist ein ziemlich blödes, da es einigermaßen elegant umgangen werden kann.
Statt
$sql = 'INSERT INTO table (feld1,feld2) VALUES ("' . mysql_real_escape_string($_POST['feld1']) . '", "' . mysql_real_escape_string($_POST['feld2']) . '")';
was durch das ewige Raus-aus-dem-String/Rein-in-den-String zugegebenermaßen nicht unbedingt leicht lesbar ist könnte man
$sql = sprintf('INSERT INTO table (feld1,feld2) VALUES ("%s", "%s")',
mysql_real_escape_string($_POST['feld1']),
mysql_real_escape_string($_POST['feld2']));
schreiben. Oder man könnte die Möglichkeiten modernerer Datenbankschnittstellen nutzen. Beispiel mysqli:
$stmt = $mysqli->prepare('INSERT INTO table (feld1,feld2) VALUES (?, ?)');
$stmt->bind_param('ss', $_POST['feld1'], $_POST['feld2']);
Hier kümmern sich die mysqli-Funktionen selbst sowohl um das Einrahmen von String-Werten als auch um die Entschärfung von kritischen Zeichen darin. Bei PDO sieht die Geschichte ähnlich aus (Example 6 und folgende).
Oder man schreibt sich einen eigenen Abstraktionslayer, der das gesamte Datenbankgeraffel von der eigentlichen Aufgabe des Scripts trennt, so das nur noch ein übersichtliches
$daten = array(
'feld1' => $_POST['feld1'],
'feld2' => $_POST['feld2']);
try {
$datenbankhandle->insert('table', $daten);
} catch (Exception $ex) {
// Fehlerbehandlung
}
übrigbleibt.
echo "$verabschiedung $name";