mysql_connect (): Нет такого файла или каталога

Я только что установил сервер MySQL (версия 3.23.58) на старый RedHat7. Я не могу установить более новую версию MySQL из-за зависимостей. Я не могу обновлять librairies на этом сервере RedHat.

Однако у меня есть проблема с подключением к базе данных с PHP. Сначала я использовал PDO, но я понял, что PDO не совместим с MySQL 3.23 …

Поэтому я использовал mysql_connect() . Теперь у меня есть следующая ошибка:

 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 

Мой код:

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

Я дважды проверил, что база данных существует, а логин и пароль верны.

Это странно, потому что код отлично работает на моем ПК с Windows с помощью Wampp. Я не могу понять, откуда эта проблема.

Есть идеи?

    Да, вы не можете так соединить!

    @PLB и @jammypeach mysqli после v4.1, он использует v3 🙂 Ребята читают спецификации, если вы действительно хотите помочь!

    Вы не можете подключиться, потому что ваш файл сокета немного ошибочен. Теперь я помню, что у старой RH была эта проблема раньше. Возможно, ваш сокет – это /var/mysql/mysql.sock или /tmp/mysql.sock, но одно или несколько приложений ищут другое.

    Если у вас есть /tmp/mysql.sock, но нет /var/mysql/mysql.sock, вы должны:

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

    Если у вас /var/mysql/mysql.sock, но нет /tmp/mysql.sock, тогда:

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

    Для внесения изменений вам понадобятся разрешения. Просто sudo, если нужно, перед командами выше!

    ДРУГОЕ РЕШЕНИЕ (проще):

    Создайте файл и вызовите phpinfo (); Ищите «mysql.default_socket»; или 'pdo_mysql.default_socket'; Откройте My.ini или My.cnf, найдите значение сокета, например socket = / tmp / mysql.sock Откройте файл php.ini (который также находится на вашей странице phpinfo () как «Загруженный файл конфигурации») и измените все вхождения неправильного расположения гнезда для правильного расположения сокетов из MySQL.

    ДРУГОЕ РЕШЕНИЕ (самый простой): DSN для PDO:

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

    mysql_connect:

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

    Ваша система действительно страшна, когда дело доходит до безопасности, если вы размещаете конфиденциальные данные, я бы обновил до последних версий.

    —- ОБНОВИТЬ —-

    Aaahhhh PHP 5.0 и MySQL 3.23 🙂

    PHP 5 имеет клиентский пакет mysql, который не может подключаться к базе данных MySQL меньше версии 4.1. Начиная с версии 4.1, MySQL использует новый способ хеширования паролей, который несовместим с базами данных до 4.1. К серверу, к которому подключена ваша конфигурация, относится версия 3.23. Поэтому вам нужно получить более высокую версию MySQL. Извините, но нет другого практического решения для вашего дела. Если бы я был вами, я бы обновил всю систему и установил самую последнюю версию ОС, если бы мне пришлось пойти с Debian и самыми последними стабильными версиями PHP и MySQL.

    Fortunatly это хорошо работает для меня:

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

    На MAC OSX просто перезапустите сервер mysql

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

    Это сработало для меня

    У меня была аналогичная проблема, на которую у меня ушло несколько часов. Я разместил Mysql / Mariadb на отдельном диске, и веб-сайт, управляемый PHP, искал сокет в местоположении по умолчанию. Итак, я создал символическую ссылку, но я думаю, что SELinux не даст разрешения. Итак, я добавил эти строки в файл /etc/php.ini, и он работает.

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

    Я использую MAMP и имею проблему с образцом. Я обнаружил, что в tmp нет mysql.sock. поэтому используйте этот код

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

    Это сработало для меня