0

私はいくつかのテストを行おうとしています。MAMPを使用していて、サーバー上のSQLデータベースに接続しようとしています。私はこれまでPDOを使用したことがなく、どのエラーコードが何を意味するのかを追跡するのに苦労しています。私はこれを取得しています:

SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'hostname' (60)

私の接続機能:

  function getConnection() {
    $dbhost="hostname";
    $dbuser="user";
    $dbpass="password";
    $dbname="somedb";
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $dbh;
  }

クエリを実行しようとしている場所:

  function getTypes() {
    $sql = "SELECT id, name FROM type";
    try {
      $db = getConnection();
      $stmt = $db->query($sql);
      $types = $stmt->fetchAll(PDO::FETCH_OBJ);
      $db = null;
      echo '{"wine": ' . json_encode($types) . '}';
    } catch(PDOException $e) {
      echo '{"error":{"text":'. $e->getMessage() .'}}';
    }
    echo 'getTypes';
  }

編集: mysqliと同じクレデンシャルを使用して接続できます。

4

4 に答える 4

1

mysqlサーバーはローカルUNIXソケットをリッスンしているか、 localhost( )にバインドしてい127.0.0.1ます。mysqlサーバーがの外部IPアドレスをリッスンしていることを確認してくださいhostname

注:接続しているユーザー(ここ)は、データベース上のクライアントIPからのuserアクセス()を持っている必要があります( );GRANTsomedb

于 2012-12-30T20:09:09.600 に答える
1

これはセキュリティの問題です。データベースが氾濫したりゴミでいっぱいになったりするのを防ぐために、構成設定には「ローカルIPのみがデータベースにアクセスできます」と表示されます。すべての共有ホスティングがそれを行います。専用サーバーがある場合は、それを行うことをお勧めします。

Linuxの/var/mysql/my.confには、次のようなものがあります。

skip-external-locking
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1
于 2012-12-30T20:15:56.837 に答える
0

正しいポートに接続していますか?

$dbh = new PDO("mysql:host=$dbhost;port=PORT;dbname=$dbname", $dbuser, $dbpass);
于 2012-12-30T20:13:49.787 に答える
0

PHP スクリプトを実行しているサーバーが SQL Server を実行しているサーバーである場合hostname、接続を使用する必要はなく、ローカル システムを参照する必要があります。構成にあるものhostnameは、有効な SQLServer の IP に解決されません。参照localhostすると、実行中のサーバー自体が参照され、必要な方法で接続されます。次のいずれかを使用できます。

localhost||127.0.0.1

于 2012-12-30T20:19:27.413 に答える