mysqli::real_connect
mysqli_real_connect
mysql サーバーとの接続をオープンする
説明
オブジェクト指向型
public bool mysqli::real_connect(
stringnull $hostname
= null
,
stringnull $username
= null
,
#[\SensitiveParameter]stringnull $password
= null
,
stringnull $database
= null
,
intnull $port
= null
,
stringnull $socket
= null
,
int $flags
= 0
)
bool mysqli_real_connect(
mysqli $mysql
,
stringnull $hostname
= null
,
stringnull $username
= null
,
#[\SensitiveParameter]stringnull $password
= null
,
stringnull $database
= null
,
intnull $port
= null
,
stringnull $socket
= null
,
int $flags
= 0
)
この関数は、以下の点で mysqli_connect
とは異なります。
パラメータ
-
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 が代わりにスローされます。
例
例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
を実行する前にコールします。
参考
- mysqli_connect
- mysqli_init
- mysqli_options
- mysqli_ssl_set
- mysqli_close