wake-up-neo.net

mysql_connect (): Keine solche Datei oder Verzeichnis

Ich habe gerade einen MySQL-Server (Version 3.23.58) auf einem alten RedHat7 installiert. Ich kann aufgrund der Abhängigkeiten keine neuere MySQL-Version installieren. Ich kann keine Librairies auf diesem RedHat-Server aktualisieren.

Ich habe jedoch ein Problem mit PHP. Zuerst habe ich PDO verwendet, aber ich habe festgestellt, dass PDO nicht mit MySQL 3.23 kompatibel ist ...

Also habe ich mysql_connect() verwendet. Nun habe ich folgenden Fehler:

Warning: mysql_connect(): No such file or directory in /user/local/Apache/htdocs/php/database.php on line 9
Error: No such file or directory

Mein Code lautet:

$Host = 'localhost';
$user = 'root';
$password = '';
$database = 'test';
$db = mysql_connect($Host, $user, $password) or die('Error : ' . mysql_error());
mysql_select_db($database);

Ich habe zweimal geprüft, ob die Datenbank existiert und dass Login und Passwort korrekt sind.

Dies ist merkwürdig, da der Code auf meinem Windows-PC mit Wampp einwandfrei funktioniert. Ich kann nicht herausfinden, woher das Problem kommt.

Irgendeine Idee?

12
Maxbester

Ja das kannst du nicht so verbinden!

@PLB und @jammypeach mysqli ist nach v4.1, er verwendet v3:) Jungs lesen die Spezifikationen, wenn Sie wirklich helfen wollen!

Sie können keine Verbindung herstellen, da Ihre Socket-Datei etwas falsch ist. Ich erinnere mich jetzt, dass die alte RH dieses Problem schon einmal hatte ... Ihr Sockel ist wahrscheinlich als /var/mysql/mysql.sock oder /tmp/mysql.sock, aber eine oder mehrere Apps suchen nach der anderen.

Wenn Sie /tmp/mysql.sock und nicht /var/mysql/mysql.sock verwenden, sollten Sie:

cd /var 
mkdir mysql
cd mysql
ln -s /tmp/mysql.sock mysql.sock

Wenn Sie /var/mysql/mysql.sock aber keine /tmp/mysql.sock haben, dann:

cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock

Sie benötigen Berechtigungen, um die Änderungen vorzunehmen. Nur Sudo, wenn nötig vor den obigen Befehlen!

EINE ANDERE LÖSUNG (einfacher):

Datei erstellen und phpinfo () aufrufen; Suchen Sie nach 'mysql.default_socket'; oder 'pdo_mysql.default_socket'; Öffnen Sie My.ini oder My.cnf und suchen Sie den Socket-Wert, z. socket =/tmp/mysql.sock Öffnen Sie Ihre php.ini-Datei (die sich auch auf Ihrer phpinfo () - Seite als 'Loaded Configuration File' befindet) und ändern Sie alle Vorkommen des falschen Socket-Speicherorts in den richtigen Socket-Speicherort von MySQL.

EINE ANDERE LÖSUNG (am einfachsten): DSN für PDO:

mysql:unix_socket=/tmp/mysql.sock;dbname=...

mysql_connect:

$db = mysql_connect('localhost:/tmp/mysql.sock', ...

In Bezug auf die Sicherheit ist Ihr System wirklich beängstigend. Wenn Sie vertrauliche Daten hosten, würde ich auf die neuesten Versionen aktualisieren.

---- UPDATE ----

Aaahhhh PHP 5.0 und MySQL 3.23 :)

PHP 5 enthält einen MySQL-Client, der keine Verbindung zu einer MySQL-Datenbank unter Version 4.1 herstellen kann. Ab Version 4.1 verwendet MySQL eine neue Art des Passwort-Hashing, die nicht mit Datenbanken vor Version 4.1 kompatibel ist. Der Server, mit dem sich Ihre Konfiguration verbindet, ist Version 3.23. Sie müssen sich also eine höhere Version von MySQL zulegen. Entschuldigung, aber es gibt keine andere praktische Lösung für Ihren Fall. Wenn ich Sie wäre, würde ich das gesamte System aufrüsten und die neueste Betriebssystemversion installieren, wenn ich Debian und die neuesten stabilen Versionen von PHP und MySQL verwenden müsste.

35
GTodorov

Zum Glück funktioniert das für mich gut:

$db = mysql_connect('localhost:/var/lib/mysql/mysql.sock', 'Username', 'Password');
2
Sina

Starten Sie auf einem MAC OSX einfach den MySQL-Server neu

Sudo /usr/local/mysql/support-files/mysql.server restart

Es hat für mich funktioniert

2

Ich hatte ein ähnliches Problem, für das ich mehrere Stunden brauchte, um es zu lösen. Ich habe Mysql/Mariadb auf einem separaten Laufwerk abgelegt und die PHP -gestützte Website suchte nach dem Socket am Standardspeicherort. Also habe ich einen symbolischen Link erstellt, aber ich denke, SELinux würde die Erlaubnis nicht geben. Dann fügte ich diese Zeilen der Datei /etc/php.ini hinzu und es funktioniert.

pdo_mysql.default_socket = /data/mysql/mysql.sock
mysql.default_socket = /data/mysql/mysql.sock
mysqli.default_socket = /data/mysql/mysql.sock
1
Code_Help

Ich benutze MAMP und hat das Beispielproblem. Ich habe festgestellt, dass es keine mysql.sock in tmp gibt. Verwenden Sie also diesen Code

cd /tmp && ln -s /Applications/MAMP/tmp/mysql/mysql.sock

Es hat für mich funktioniert

0
lzdaniel