echo $begrüßung;
Auch wenn du es schon gelöst hast, noch ein paar Tipps.
Lässt sich mein Code irgendwie verbessern, dass PHP schneller arbeiten kann?
Vor der Verbesserung steht erst einmal eine Analyse des bisherigen Zustands. Wo liegen die Stellen, die zu viel Zeit beanspruchen? Wird das Script mit zunehmender Datenmenge immer langsamer?
Letzteres lässt sich mit Hilfe von Kontrollausgaben ermitteln. Beispielsweise pro Durchlauf einen Punkt ausgeben (flush() nicht vergessen, damit der Server die Ausgabe sofort an den Client sendet und nicht erst auf eine bestimmte Paketgröße wartet), oder bei vielen Daten alle x Durchläufe ein Lebenszeichen senden. So kann man den Fortschritt verfolgen und ein Ende abschätzen.
Dauert jeder Durchlauf gleich lang, untersucht man nun, welcher Codeteil welche Zeit verbraucht. Hat man keinen Profiler zur Hand kann man mit microtime() die Zeit ermitteln und dann Differenzen ausrechnen.
Wenn Datenbankabfragen zu lange dauern, liegt das meist am fehlenden oder nicht genutzten Index. Ein EXPLAIN vor der Abfrage gibt darüber Auskunft.
Soweit allgemeine Vorgehensweisen.
mysql_connect("localhost", " ", " ") or die("Verbindung zu MySQL gescheitert!");
mysql_select_db(" ") or die("Datenbankzugriff gescheitert!");
die() ist meistens keine angemessene Fehlerbehandlung. Da das Script anscheinend nur ein einziges Mal laufen soll, ist es hier zwar vertretbar, aber dessen Ausgabe unzweckmäßig. Gib doch, wenn einfach nur mysql_error() aus. Das erzählt dir deutlich genauer als dein Text, was losgewesen ist.
$sql = "SELECT wort FROM woerter WHERE wort = '".$treffer['anfang'][0]."'";
$result = mysql_query($sql);
if (mysql_num_rows($result) == 0) {
Wo ist deine Fehlerbehandlung abgeblieben? Auch mysql_query() kann fehlschlagen. Außerdem fehlt die Behandlung der Daten für den MySQL-Statement-Kontext. Wenn in deiner Liste O'Brien steht, erzeugt das einen Syntaxfehler. (Stichwort: mysql_real_escape_string())
Desweiteren ist zum reinen Zwecke der Zählung ein COUNT(*) angebrachter. Wenn mysql_num_rows() die Ergebnismenge zählen soll, muss diese zunächst vollständig vom Server abgeholt sein. mysql_query() macht das von sich aus bei jeder Abfrage im Hintergrund, eben auch damit mysql_num_rows() funktionieren kann. Du nutzt anschließend die abgefragte Datenmenge überhaupt nicht. Das COUNT()-Ergebnis ist nur ein Datensatz, im Gegensatz zu möglicherweise vielen überflüssigen.
Auch das ist nur eine allgemeine Vorgehensweise. In deinem Fall gibt es ja mit dem Unique-Index die deutlich bessere Lösung als das Zählen.
$sql = "INSERT INTO woerter VALUES('', '".$treffer['anfang'][0]."', '', '', now())";
Hier fehlt wieder die kontextgerechte Behandlung der Eingabedaten.
Wenn das gleiche Statement mit unterschiedlichen Daten immer wieder ausgeführt werden soll, spielen Prepared Statements ihren Vorteil aus. Nicht nur, dass du dir bei ihrer Verwendung das Maskieren der Daten sparen kannst, es fällt auch noch das ständige Parsen des Statements am Server weg. Um Prepared Statements nutzen zu können, musst du aber auf die modernere mysqli-Extension PHPs umsteigen.
echo "$verabschiedung $name";