Sven Rautenberg: 1und1

Beitrag lesen

Moin!

Hallo liebe Forennutzer!

Ich suche nun seit ca. 1-2 Stunden nach einer Antwort und finde leider auch in diesem Forum keine Antwort.
Ich bekomme bei jedem SQL Ausdruck folgenden Fehler:
"Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)"

PHP will Mysql durch die Unix-Domain-Socket kontaktieren, und das geht schief.

Und das ist komisch, denn deine DB-Verbindung sollte eigentlich über TCP geschehen. Also...

Mein Anbieter ist 1und1 und in meinem PHP Header, hab ich es vorerst (Passwort wird noch verschlüsselt, wenn es läuft ;)) so geschrieben:
$datenbank="db000000000";
$server="db000000000.db.1and1.com";
$user="dbo000000000";
$passwort="humdibum";
MYSQL_CONNECT($server, $user, $passwort) or die ("<H3>Datenbankserver nicht erreichbar</H3>");
@MYSQL_SELECT_DB($datenbank) or die ( "<H3>Datenbank nicht vorhanden</H3>");

...erinnern wir uns, dass mysql_connect einen Rückgabewert mit dem Verbindungshandle hat, welcher bei jedem weiteren Aufruf einer mysql-Funktion wieder mit angegeben werden KANN. Wenn man den weglässt, wird "die erste Mysql-Verbindung" genommen. Das funktioniert dann toll, well mysql_connect() tatsächlich der erste MySQL-Befehl ist, der aufgerufen wird.

Wenn aber ein anderer MySQL-Befehl, der eine Connection braucht, vorher aufgerufen wird, dann erstellt dieser eine MySQL-Connection mit den Standardwerten, die in PHP konfiguriert sind. Das ist gerne mal "Die Standard-Socket, mit Username 'root' und ohne Passwort".

Die Fehlerlösung ist also einfach: Verbindungshandle von mysql_connect in eine Variable speichern und in jeder mysql-Funktion danach immer mit angeben.

Dieser Fehler ist übrigens Ausdruck von schlampiger Programmierung. Ich möchte Wetten, dass du in deinem Skript nicht nur dieses Problem eingebaut hast, sondern auch massenhaft Sicherheitslücken aufgrund fehlender Kontextwechselbehandlung. Prophylaktisch verweise ich schon mal auf http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel.

- Sven Rautenberg