(PHP 5)
mysqli::real_connect -- mysqli_real_connect — mysql サーバとの接続をオープンする
オブジェクト指向型
手続き型
MySQL データベースエンジンとの接続を確立します。
この関数は、以下の点で mysqli_connect() とは異なります。
mysqli_real_connect() は、 mysqli_init() が作成した接続オブジェクトを必要とします。
mysqli_options() 関数を使用して、 さまざまな接続オプションを設定することが可能です。
flags パラメータが使用できます。
手続き型のみ: mysqli_connect() あるいは mysqli_init() が返すリンク ID。
ホスト名あるいは IP アドレス。NULL 値あるいは文字列 "localhost" をこのパラメータに指定すると、ローカルホストを使用します。 使用可能な場合は、TCP/IP プロトコルよりもパイプを優先して使用します。
MySQL ユーザ名。
NULL を指定した場合は、MySQL サーバは パスワードを持たないユーザレコードについてのみ認証を試みます。 これにより、同一のユーザ名に対して (パスワードが指定されたか 否かによって) 違う権限を与えることができます。
指定した場合は、 クエリが行われるデフォルトのデータベースとなります。
MySQL サーバに接続する際のポート番号を指定します。
使用するソケットあるいは名前つきパイプを指定します。
注意:
socket 引数を指定しても、MySQL サーバへの 接続時の型を明示的に定義することにはなりません。MySQL サーバへの 接続方法については host 引数で定義されます。
パラメータ flags で、接続時のさまざまなオプションを設定します。
名前 | 説明 |
---|---|
MYSQLI_CLIENT_COMPRESS | 圧縮プロトコルを使用します。 |
MYSQLI_CLIENT_FOUND_ROWS | 変更された行数ではなく、マッチした行数を返します。 |
MYSQLI_CLIENT_IGNORE_SPACE | 関数名に続く空白文字を許可します。すべての関数名を予約語とします。 |
MYSQLI_CLIENT_INTERACTIVE | 接続を閉じるまでのタイムアウト時間として、 (wait_timeout のかわりに) interactive_timeout の使用を許可します。 |
MYSQLI_CLIENT_SSL | SSL (暗号化) を使用します。 |
注意:
セキュリティの観点から、PHP では MULTI_STATEMENT フラグはサポートされていません。複数のクエリを実行したい場合は、 mysqli_multi_query() 関数を使用してください。
成功した場合に TRUE を、失敗した場合に FALSE を返します。
例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::init();
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 が使います。
Libmysql が使うデフォルトの文字セットは my.cnf で設定したものです。あるいは明示的に mysqli_options() をコールして設定することもできます。 これは、mysqli_init() のあとで mysqli_real_connect() を実行する前にコールします。