Подтвердить что ты не робот

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. Я не могу понять, откуда эта проблема.

Любая идея?

4b9b3361

Ответ 1

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

@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, найдите значение сокета, например. Гнездо = ​​/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', ...

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

---- UPDATE ----

Aaahhhh PHP 5.0 и MySQL 3.23:)

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

У меня была аналогичная проблема, на которую у меня ушло несколько часов. Я разместил 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

Ответ 5

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

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

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