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 サーバーは「localhost」の代わりに「127.0.0.1」を使用します

于 2013-11-09T22:40:47.403 に答える
10

これが機能するために確認する必要がある設定が 2 つあります (もちろん、MySQL サーバーがインストールされていると仮定します)。

mysql.default_socketPHP 構成の値を確認してください。

ヘッダーsocketの下にある MySQL 構成ファイルの値を確認します。[mysqld]

これらの値は同一でなければなりません。そうでない場合は、一方を他方に合わせて変更し、それぞれのサービスを再起動します。

于 2012-12-14T01:17:44.030 に答える
2

グーグルで検索するとかなりの数の結果が得られるため、これは一般的な問題のようです。私はこれを 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 に答える