5

I'm learning PHP MYSQL and trying to create a database.

I'm following this tutorial http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app

So far I'm testing to see if the server has access to MySQL. When I use the following code.

?php

class RedeemAPI {
   private $db;

   // Constructor - open DB connection
   function __construct() {
       $this->db = new mysqli('localhost', 'username', 'password', 'promos');
    $this->db->autocommit(FALSE);
}

// Destructor - close DB connection
function __destruct() {
    $this->db->close();
}

// Main method to redeem a code
function redeem() {
    // Print all codes in database
    $stmt = $this->db->prepare('SELECT id, code, unlock_code, uses_remaining FROM rw_promo_code');
    $stmt->execute();
    $stmt->bind_result($id, $code, $unlock_code, $uses_remaining);
    while ($stmt->fetch()) {
        echo "$code has $uses_remaining uses remaining!";
    }
    $stmt->close();
   }
} 
// This is the first thing that gets called when this page is loaded
// Creates a new instance of the RedeemAPI class and calls the redeem method
$api = new RedeemAPI;
$api->redeem();

?

I get the following error:

Warning: mysqli::mysqli() [mysqli.mysqli]: [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in /Users/user/Sites/promos/index.php on line 8

Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2002): No such file or directory in /Users/user/Sites/promos/index.php on line 8

Warning: mysqli::autocommit() [mysqli.autocommit]: Couldn't fetch mysqli in /Users/user/Sites/promos/index.php on line 9

Warning: mysqli::prepare() [mysqli.prepare]: Couldn't fetch mysqli in /Users/user/Sites/promos/index.php on line 20

Fatal error: Call to a member function execute() on a non-object in /Users/user/Sites/promos/index.php on line 21

Did I perhaps forget to enable something?

It might explain why I cannot connect via my IP address to sequel pro and only to 127.0.0.1?

Shadow
  • 33,525
  • 10
  • 51
  • 64
nimbus
  • 141
  • 2
  • 2
  • 11

3 Answers3

17

Apache servers use '127.0.0.1' instead of 'localhost'

Jonathan
  • 148
  • 5
  • 21
  • This works, but could you possibly explain why in a little more detail please? I'm just trying to get my head around all of this. – Sammio2 Mar 18 '14 at 21:15
  • As explained by @mingos this is a common issue. It appears 'localhost' doesn't point to the correct socket within the Apache server. This is rectified by using 127.0.0.1 – Jonathan Mar 19 '14 at 16:57
  • It is nothing to do with apache. Mysql use 'localhost' via 'UNIX socket', and '127.0.0.1' via 'TCP/IP'. So specify the right path of 'mysql.sock' if you use 'localhost'. https://dev.mysql.com/doc/refman/5.6/en/connecting.html#id471316 – ahuigo Feb 11 '15 at 16:49
10

There are two settings you have to check for this to work (assuming you have MySQL server installed of course):

Check the value of mysql.default_socket in your PHP configuration.

Check the value of socket in your MySQL configuration file under the [mysqld] heading.

Those values have to be identical; if they're not, change one to match the other and restart respective service.

Ja͢ck
  • 170,779
  • 38
  • 263
  • 309
  • 1
    *mysqli* use `mysqli.default_socket` instead. and `pdo_mysql.default_socket` for *pdo*. We could check this through `php -i | grep -F .default_socket` – ahuigo Feb 11 '15 at 16:45
2

This seems to be a common issue, as googling for it yields quite a few results. I experienced this on my two linux boxes as well (never under Windows though) and at some point I resolved to just use 127.0.0.1 on all dev servers. Basically, localhost makes the connection to the MySQL server use a socket, but your configuration doesn't point to the socket file correctly.

Here are a couple of resources that you might find useful:

http://westsworld.dk/blog/2011/03/problems-connecting-to-unixvarmysqlmysql-sock/ - basically what @Jack suggests, but more in depth

Can't connect to MySQL on Mac -- missing mysql.sock file - here's how to locate your socket file (for some reason, my php.ini had the path wrong, and I assume your case could be similar).

I hope this helps.

Community
  • 1
  • 1
mingos
  • 23,778
  • 12
  • 70
  • 107