Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

mysql_connect(): No such file or directory

I have just installed a MySQL server (version 3.23.58) on an old RedHat7. I cannot install a more recent MySQL version because of the dependencies. I cannot update librairies on this RedHat server.

However, I have a problem connecting to the database with PHP. First I used PDO but I realized that PDO was not compatible with MySQL 3.23...

So I used mysql_connect(). Now I have the following error:

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

My code is:

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

I checked twice that the database exists and the login and password are correct.

This is strange because the code works fine on my Windows PC with Wampp. I cannot figure out where the problem comes from.

Any idea?

like image 797
Maxbester Avatar asked Sep 25 '12 14:09

Maxbester


People also ask

Is mysql_connect deprecated?

This extension was deprecated in PHP 5.5. 0, and it was removed in PHP 7.0.

Does PHP 5.6 support mysql_connect?

It's still available in 5.6.

Does PHP 7 support mysql_connect?

PHP 7 has removed support for the mysql extension and affects the following: Any queries using a mysql_connect function will not function. PHP 7 only allows connections to a MySQL database using mysqli or PDO_MySQL.

What is the function of mysql_connect?

mysql_connect() Function: The mysql_connect() function is used to establish a new connection with the database. This connection is established when the script starts its execution.


2 Answers

Yes you can not connect like that!

@PLB and @jammypeach mysqli is after v4.1, he is using v3 :) Guys read the specs, if you want really to help!

You can't connect, because your socket file is a bit wrong. I remember now that the old RH had this issue before. Your socket is probably as /var/mysql/mysql.sock or /tmp/mysql.sock but one or more apps are looking for the other.

If yours is /tmp/mysql.sock but no /var/mysql/mysql.sock you should:

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

If you have /var/mysql/mysql.sock but no /tmp/mysql.sock then:

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

You'll need permissions to make the changes. Just sudo, if needed before the commands above!

ANOTHER SOLUTION (easier):

Create file and call phpinfo(); Look for 'mysql.default_socket'; or 'pdo_mysql.default_socket'; Open My.ini or My.cnf find the socket value e.g. socket=/tmp/mysql.sock Open your php.ini file (which is also found on your phpinfo() page as ‘Loaded Configuration File‘) and change all the occurrences of the incorrect socket location to the correct socket location from MySQL.

ANOTHER SOLUTION (easiest): DSN for PDO:

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

mysql_connect:

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

Your system is really scary when it comes to security, if you're hosting sensitive data, I'd upgrade to the latest versions.

---- UPDATE ----

Aaahhhh PHP 5.0 and MySQL 3.23 :)

PHP 5 has a mysql client packaged that cannot connect to a MySQL database less than version 4.1. Starting with version 4.1, MySQL uses a new way of password hashing that is not compatible with pre-4.1 databases. The server your configuration is connecting to is version 3.23. So you need to get yourself a higher version of MySQL. Sorry, but there is no other practical solution for your case. If I was you, I'd upgrade the whole system and install the most recent OS version, if I had to I'd go with Debian and the most recent stable versions of PHP and MySQL.

like image 81
GTodorov Avatar answered Sep 22 '22 19:09

GTodorov


Fortunatly this is worked well for me:

$db = mysql_connect('localhost:/var/lib/mysql/mysql.sock', 'Username', 'Password');
like image 22
Sina Avatar answered Sep 19 '22 19:09

Sina