mysql サーバーとの接続をオープンする

# mysqli::real_connect

# mysqli_real_connect

(PHP 5, PHP 7, PHP 8)

mysqli::real_connect -- mysqli_real_connect — mysql サーバーとの接続をオープンする

### 説明

オブジェクト指向型

public function mysqli::real_connect(
?string `$hostname` = `null`,
?string `$username` = `null`,
#[\SensitiveParameter]?string `$password` = `null`,
?string `$database` = `null`,
?int `$port` = `null`,
?string `$socket` = `null`,
int `$flags` = 0
): bool

手続き型

function mysqli_real_connect(
mysqli `$mysql`,
?string `$hostname` = `null`,
?string `$username` = `null`,
#[\SensitiveParameter]?string `$password` = `null`,
?string `$database` = `null`,
?int `$port` = `null`,
?string `$socket` = `null`,
int `$flags` = 0
): bool

オプションの接続オプションを使用して、 MySQL データベースサーバーとの接続を確立します。

この関数は、以下の点で mysqli_connect() とは異なります。

- mysqli_real_connect() は、 mysqli_init() が作成した接続オブジェクトが必要です。

- `flags` パラメータが使用できます。

### パラメータ

`link`
  手続き型のみ: mysqli_connect() あるいは mysqli_init() が返す mysqliオブジェクト。
`hostname`

  ホスト名あるいは IP アドレス。 `null` を渡した場合、 mysqli.default_host から値を取得します。 可能な場合は、TCP/IP プロトコルの代わりにパイプが使用されます。 ホスト名とポートが一緒に指定された場合は、TCP/IP プロトコルが使われます。 例: `localhost:3308`.

`username`

  MySQL ユーザー名。 `null` の場合は、mysqli.default_user iniオプションに基づいてユーザー名が決定されます。

`password`

  MySQL のパスワード。 `null` の場合は、mysqli.default_pw iniオプションに基づいてパスワードが決定されます。

`database`

  `null` 以外を指定した場合は、 クエリが実行されるデフォルトのデータベースとなります。

`port`

  MySQL サーバーに接続する際のポート番号を指定します。 `null` の場合は、mysqli.default_port iniオプションに基づいてポート番号が決定されます。

`socket`

  使用するソケットあるいは名前つきパイプを指定します。 `null` の場合は、mysqli.default_socket iniオプションに基づいてソケットが決定されます。

  > 注意:

  > `socket` 引数を指定しても、MySQL サーバーへの 接続時の型を明示的に定義することにはなりません。MySQL サーバーへの 接続方法については `hostname` 引数で定義されます。

`flags`

  パラメータ `flags` で、接続時のさまざまなオプションを設定します。

  サポートするフラグ
  名前 | 説明
  --- | ---
  `MYSQLI_CLIENT_COMPRESS` | 圧縮プロトコルを使用します。
  `MYSQLI_CLIENT_FOUND_ROWS` | 変更された行数ではなく、マッチした行数を返します。
  `MYSQLI_CLIENT_IGNORE_SPACE` | 関数名に続く空白文字を許可します。すべての関数名を予約語とします。
  `MYSQLI_CLIENT_INTERACTIVE` | 接続を閉じるまでのタイムアウト時間として、 (`wait_timeout` のかわりに) `interactive_timeout` の使用を許可します。
  `MYSQLI_CLIENT_SSL` | SSL (暗号化) を使用します。
  `MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT` | `MYSQLI_CLIENT_SSL` と似ていますが、 SSL 証明書の検証は行いません。 これは、MySQL Native Driver と MySQL 5.6 以降の組み合わせでのみ使えます。

  > 注意:

  > セキュリティの観点から、PHP では `MULTI_STATEMENT` フラグはサポートされていません。複数のクエリを実行したい場合は、 mysqli_multi_query() 関数を使用してください。

### 戻り値

成功した場合に `true` を、失敗した場合に `false` を返します。

### エラー / 例外

mysqli のエラー報告 (`MYSQLI_REPORT_ERROR`) が有効になっており、かつ要求された操作が失敗した場合は、警告が発生します。さらに、エラー報告のモードが `MYSQLI_REPORT_STRICT` に設定されていた場合は、mysqli_sql_exception が代わりにスローされます。

### 変更履歴

バージョン | 説明
--- | ---
7.4.0 | すべてのパラメータが、nullable になりました。

### 例

例1 mysqli::real_connect() の例

オブジェクト指向型

    <?php

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysqli = mysqli_init();

    $mysqli->options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0');
    $mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);

    $mysqli->real_connect('localhost', 'my_user', 'my_password', 'my_db', null, null, MYSQLI_CLIENT_COMPRESS|MYSQLI_CLIENT_FOUND_ROWS);

    echo 'Success... ' . $mysqli->host_info . "\n";

オブジェクト指向型 で mysqli クラスを継承する例

    <?php

    class foo_mysqli extends mysqli {
        public function __construct($host, $user, $pass, $db)
        {
            parent::__construct();

            parent::options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0');
            parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);

            parent::real_connect($host, $user, $pass, $db, null, null, MYSQLI_CLIENT_COMPRESS|MYSQLI_CLIENT_FOUND_ROWS);
        }
    }

    $db = new foo_mysqli('localhost', 'my_user', 'my_password', 'my_db');

    echo 'Success... ' . $db->host_info . "\n";

手続き型

    <?php

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_init();

    mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0');
    mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5);

    mysqli_real_connect($link, 'localhost', 'my_user', 'my_password', 'my_db', null, null, MYSQLI_CLIENT_COMPRESS|MYSQLI_CLIENT_FOUND_ROWS);

    echo 'Success... ' . mysqli_get_host_info($link) . "\n";

上の例の出力は以下となります。

    Success... MySQL host info: localhost via TCP/IP

### 注意

> 注意: MySQLnd は常に、サーバーのデフォルト文字セットを想定しています。この文字セットは接続時の ハンドシェイク/認証 のときに送信され、これを mysqlnd が使います。 Libmysqlclient が使うデフォルトの文字セットは my.cnf で設定したものです。あるいは明示的に mysqli_options() をコールして設定することもできます。 これは、mysqli_init() のあとで mysqli_real_connect() を実行する前にコールします。

### 参考

- mysqli_connect() - mysqli::__construct のエイリアス
- mysqli_init() - MySQLi を初期化し、mysqli_real_connect() で使うオブジェクトを返す
- mysqli_options() - オプションを設定する
- mysqli_ssl_set() - SSL を使用したセキュアな接続を確立する
- mysqli_close() - 事前にオープンしているデータベース接続を閉じる

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open