The PHP PDOException SQLSTATE MySQL can't connect socket error

PHP PDOException MySQL socket error FAQ: What is the PHP PDOException SQLSTATE MySQL socket error, and how do I fix the problem?

Every time I work with a new web hosting company, I keep running into one variation or another of this PHP MySQL socket error. It's pretty darned annoying, but at least I know how to fix it now.

In short, if you try to access a MySQL database using the PHP PDO library, such as with Drupal 7, which is what I just did, you may get an ugly MySQL socket error that looks like this:

PDOException: SQLSTATE[HY000] [2002] Can't connect to local MySQL server 
through socket '/home/lib/mysql/mysql.sock' 
(2) in drupal_is_denied() (line 1779 of /home/al/html/includes/bootstrap.inc).

What this has always meant for me is that I'm trying to access my MySQL database host with the name "localhost". When PHP sees this, it looks for a MySQL socket wherever the PHP configuration file says the socket should be.

PHP PDO MySQL socket error - Solution

The solution to this error message is simple: Change "localhost" to the IP address "127.0.0.1". For some reason when PHP sees this IP address it doesn't attempt to access a local socket, and instead assumes that it should use a network connection to your MySQL database server.

To repeat, in your PHP configuration file (which in my case was a Drupal configuration file), change from this:

$host = 'localhost'

to this:

$host = '127.0.0.1'

If that doesn't work, please check my PHP MySQL can't connect socket error tip, which discusses this in a little more depth.