0

私は次のように離れたホストに接続しようとします:

    class Singleton {
  public static $connection;

  public static function getConnection(){
      if(self::$connection==null){
         $dsn = 'mysql:dbname=gtrscrpt_ubot;';
         $user = 'MyUser';
         $password = 'MyPassword';
        try {
           self::$connection = new PDO('mysql:host=gator188.hostgator.com;port=2983;dbname=gtrscpt_ubot;',$user,$password );
           self::$connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            echo 'Connection failed: ' . $e->getMessage();
        }
      }
      return self::$connection;
  }

}


Singleton::getConnection();

私はこれを手に入れます:

Connection failed: SQLSTATE[HY000] [2006] MySQL server has gone away

問題は、コードが間違っているのか、実際にサーバーに接続できないのかわからないことです(ただし、接続する必要があることはわかっています)

更新: 接続に失敗しました:SQLSTATE [HY000][2000]mysqlndは古い安全でない認証を使用してMySQL4.1以降に接続できません。管理ツールを使用して、コマンドSET PASSWORD = PASSWORD('your_existing_password')でパスワードをリセットしてください。これにより、新しい、より安全なハッシュ値がmysql.userに保存されます。このユーザーがPHP5.2以前で実行される他のスクリプトで使用されている場合は、my.cnfファイルからold-passwordsフラグを削除する必要がある場合があります**

4

1 に答える 1

3

ホストに問題があるようです。ホスト名、ポート、および資格情報が正しいこと、およびサーバーが外部の発信ネットワークにアクセスできることを確認します。

MySQLドキュメントから:

C.5.2.9。MySQLサーバーがなくなりました

MySQLサーバーがなくなったというエラーの最も一般的な理由は、サーバーがタイムアウトして接続を閉じたことです。

編集:

ホストはまだ古いMySQLパスワードスキームを使用しています。MySQLにアクセスできる場合は、エラーの提案に従ってパスワードを更新できます。

SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges

UserHostあなたの詳細を置き換えます。この質問の詳細情報。

于 2012-11-28T10:30:27.333 に答える