web-dev-qa-db-fra.com

mysql_connect (): Aucun fichier ou répertoire de ce type

Je viens d'installer un serveur MySQL (version 3.23.58) sur un ancien RedHat7. Je ne peux pas installer une version plus récente de MySQL à cause des dépendances. Je ne peux pas mettre à jour les librairies sur ce serveur RedHat.

Cependant, j'ai un problème de connexion à la base de données avec PHP. J'ai d'abord utilisé PDO, mais je me suis rendu compte que PDO n'était pas compatible avec MySQL 3.23 ...

J'ai donc utilisé mysql_connect(). Maintenant, j'ai l'erreur suivante:

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

Mon code est:

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

J'ai vérifié deux fois que la base de données existe et que l'identifiant et le mot de passe sont corrects.

C'est étrange car le code fonctionne bien sur mon PC Windows avec Wampp. Je n'arrive pas à comprendre d'où vient le problème.

Une idée?

12
Maxbester

Oui, vous ne pouvez pas vous connecter comme ça!

@PLB et @jammypeach mysqli est après la v4.1, il utilise la v3:) Les gars lisent les spécifications, si vous voulez vraiment aider!

Vous ne pouvez pas vous connecter, car votre fichier de socket est un peu faux. Je me souviens maintenant que l’ancien HR avait déjà eu ce problème avant… .. Votre socle est probablement en tant que /var/mysql/mysql.sock ou /tmp/mysql.sock mais une ou plusieurs applications recherchent l’autre.

Si le vôtre est /tmp/mysql.sock mais pas /var/mysql/mysql.sock, vous devriez:

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

Si vous avez /var/mysql/mysql.sock mais pas /tmp/mysql.sock alors:

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

Vous aurez besoin d'autorisations pour effectuer les modifications. Juste Sudo, si nécessaire avant les commandes ci-dessus!

UNE AUTRE SOLUTION (plus facile):

Créez un fichier et appelez phpinfo (); Cherchez 'mysql.default_socket'; ou 'pdo_mysql.default_socket'; Ouvrez My.ini ou My.cnf pour trouver la valeur de socket, par exemple. socket =/tmp/mysql.sock Ouvrez votre fichier php.ini (qui se trouve également sur votre page phpinfo () en tant que 'Fichier de configuration chargé') et modifiez toutes les occurrences de l'emplacement de socket incorrect par l'emplacement de socket approprié. de MySQL.

UNE AUTRE SOLUTION (la plus facile): DSN pour PDO:

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

mysql_connect:

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

Votre système fait vraiment peur en matière de sécurité. Si vous hébergez des données sensibles, je passerais aux dernières versions.

---- METTRE À JOUR ----

Aaahhhh PHP 5.0 et MySQL 3.23 :)

PHP 5 a un client mysql empaqueté qui ne peut pas se connecter à une base de données MySQL inférieure à la version 4.1. À partir de la version 4.1, MySQL utilise une nouvelle méthode de hachage des mots de passe, incompatible avec les bases de données antérieures à 4.1. Le serveur auquel vous vous connectez est la version 3.23. Vous devez donc vous procurer une version supérieure de MySQL. Désolé, il n'y a pas d'autre solution pratique pour votre cas. Si j'étais vous, je mettrais à niveau tout le système et installerais la version la plus récente du système d'exploitation. Si je devais le faire, j'utiliserais Debian et les versions stables les plus récentes de PHP et de MySQL.

35
GTodorov

Heureusement, cela a bien fonctionné pour moi:

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

Sur un MAC OSX, redémarrez simplement le serveur mysql

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

Ça a fonctionné pour moi

2
Shashank Agarwal

J'ai eu un problème similaire qui m'a pris plusieurs heures à résoudre. J'ai placé Mysql/Mariadb sur un lecteur séparé et le site Web géré par PHP était à la recherche du socket à l'emplacement par défaut. J'ai donc créé un lien symbolique, mais je pense que SELinux ne donnerait pas cette permission. Alors, j’ai ajouté ces lignes au fichier /etc/php.ini et cela fonctionne.

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

J'utilise MAMP et a l'exemple de problème. J'ai trouvé qu'il n'y a pas de mysql.sock dans tmp. alors utilisez ce code

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

Ça a fonctionné pour moi

0
lzdaniel