5

我正在学习 PHP MYSQL 并尝试创建一个数据库。

我正在关注本教程 http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app

到目前为止,我正在测试服务器是否可以访问 MySQL。当我使用以下代码时。

?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();

?

我收到以下错误:

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

我可能忘记启用某些东西了吗?

它可以解释为什么我无法通过我的 IP 地址连接到 sequel pro 并且只能连接到 127.0.0.1?

4

3 回答 3

17

Apache 服务器使用 '127.0.0.1' 而不是 'localhost'

于 2013-11-09T22:40:47.403 回答
10

您必须检查两个设置才能使其正常工作(当然假设您安装了 MySQL 服务器):

检查mysql.default_socketPHP 配置中的值。

检查socketMySQL 配置文件中[mysqld]标题下的值。

这些值必须相同;如果不是,请更改一个以匹配另一个并重新启动相应的服务。

于 2012-12-14T01:17:44.030 回答
2

这似乎是一个常见的问题,因为谷歌搜索它会产生相当多的结果。我在我的两个 linux 机器上也遇到过这种情况(虽然从来没有在 Windows 下),并且在某些时候我决定在所有开发服务器上只使用 127.0.0.1。基本上, localhost 使与 MySQL 服务器的连接使用套接字,但您的配置没有正确指向套接字文件。

以下是一些您可能会觉得有用的资源:

http://westsworld.dk/blog/2011/03/problems-connecting-to-unixvarmysqlmysql-sock/ - 基本上是@Jack 的建议,但更深入

无法在 Mac 上连接到 MySQL - 缺少 mysql.sock 文件- 以下是如何定位您的套接字文件(由于某种原因,我的 php.ini 路径错误,我假设您的情况可能类似)。

我希望这有帮助。

于 2012-12-14T01:26:41.917 回答