web-dev-qa-db-ja.com

インストール中にリモートMySQLに接続できません。drupalはホストの代わりにunix_socketを使用しますか?

リモートデータベースクラウドサービスがあるクラウドにdrupalサイトをインストールしています。

しかし、drupalはHostを無視しているようで、リモートデータベースに接続するために_unix_socket_を使用しています。

インストール中のデータベースのセットアップ画面は次のとおりです。データベース名、ユーザー名、パスワードは正しいと思います。 HostフィールドでIPアドレスとドメイン名を試しました。 socketフィールドにはemptyが残ります。

enter image description here

そして私は得ました:

データベースサーバーへの接続に失敗しました。サーバーは次のメッセージを報告します:SQLSTATE [HY000] [2002]無効な引数。

私はPHPとmysqlに精通していません。何が無効な引数です。私はgrepをいくつか実行し、_[drupaldir]/includes/database/database.inc_にprint_r()を追加します。

_$driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
print_r($dsn);print_r($username);print_r($password);print_r($driver_options);
// Call PDO::__construct and PDO::setAttribute.
parent::__construct($dsn, $username, $password, $driver_options);
_

これは私が得たものです(いくつかの改行を追加し、実際の名前とパスワードを置き換えます):

_mysql:unix_socket=;dbname=demo_db
demo_username
demo_password
Array ( [1000] => 1 [20] => 1 [3] => 2 )
_

つまり、Drupalインストールは、Hostを無視し、空であっても_unix_socket_を使用しますか?

1
clark

私はこの問題を見つけたと思います。 contains/database/mysql/database.inc、32行目:

// The DSN should use either a socket or a Host/port.
if (isset($connection_options['unix_socket'])) {// will be TRUE if unix_socket is ''
  $dsn = 'mysql:unix_socket=' . $connection_options['unix_socket'];
}
else {
  // Default to TCP connection on port 3306.
  $dsn = 'mysql:Host=' . $connection_options['Host'] . ';port=' . (empty($connection_options['port']) ? 3306 : $connection_options['port']);
}

$connection_options['unix_socket']は、ページ上で空のままにすると、空の文字列になります。したがって、このテストはTRUEになります。 isset!emptyに置き換えて、この問題を解決してください:)

1
clark