PHP Conference Nagoya 2025

mysqli::real_connect

mysqli_real_connect

(PHP 5, PHP 7, PHP 8)

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

説明

オブジェクト指向型

public 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

手続き型

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() が作成した接続オブジェクトが必要です。

  • mysqli_options() 関数を使用して、 さまざまな接続オプションを設定することが可能です。

  • 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
= mysqli_init();
if (!
$mysqli) {
die(
'mysqli_init failed');
}

if (!
$mysqli->options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die(
'Setting MYSQLI_INIT_COMMAND failed');
}

if (!
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die(
'Setting MYSQLI_OPT_CONNECT_TIMEOUT failed');
}

if (!
$mysqli->real_connect('localhost', 'my_user', 'my_password', 'my_db')) {
die(
'Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}

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

$mysqli->close();
?>

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

<?php

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

if (!
parent::options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die(
'Setting MYSQLI_INIT_COMMAND failed');
}

if (!
parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die(
'Setting MYSQLI_OPT_CONNECT_TIMEOUT failed');
}

if (!
parent::real_connect($host, $user, $pass, $db)) {
die(
'Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
}
}

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

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

$db->close();
?>

手続き型

<?php

$link
= mysqli_init();
if (!
$link) {
die(
'mysqli_init failed');
}

if (!
mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die(
'Setting MYSQLI_INIT_COMMAND failed');
}

if (!
mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die(
'Setting MYSQLI_OPT_CONNECT_TIMEOUT failed');
}

if (!
mysqli_real_connect($link, 'localhost', 'my_user', 'my_password', 'my_db')) {
die(
'Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}

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

mysqli_close($link);
?>

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

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

注意

注意:

MySQLnd は常に、サーバーのデフォルト文字セットを想定しています。この文字セットは接続時の ハンドシェイク/認証 のときに送信され、これを mysqlnd が使います。

Libmysqlclient が使うデフォルトの文字セットは my.cnf で設定したものです。あるいは明示的に mysqli_options() をコールして設定することもできます。 これは、mysqli_init() のあとで mysqli_real_connect() を実行する前にコールします。

参考

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top