PHPのお勉強!

PHP TOP

mysqli::options

mysqli_options

(PHP 5, PHP 7, PHP 8)

mysqli::options -- mysqli_optionsオプションを設定する

説明

オブジェクト指向型

public mysqli::options(int $option, string|int $value): bool

手続き型

mysqli_options(mysqli $mysql, int $option, string|int $value): bool

接続に関する追加オプションを設定し、 接続の振る舞いに影響を与えるために使用します。

この関数は、いくつかのオプションを設定して複数回コールされることがあります。

mysqli_options() は、 mysqli_init() がコールされた後、 mysqli_real_connect() の前にコールしなければなりません。

パラメータ

link

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

option

指定するオプション。以下の値のいずれかです。

使用可能なオプション
名前 説明
MYSQLI_OPT_CONNECT_TIMEOUT 接続のタイムアウト秒数
MYSQLI_OPT_READ_TIMEOUT コマンドの実行結果が返ってくるまでのタイムアウト秒数。PHP 7.2.0 以降で利用可能です。
MYSQLI_OPT_LOCAL_INFILE LOAD LOCAL INFILE の使用可/不可。
MYSQLI_INIT_COMMAND MySQL サーバーへの接続後に実行するコマンド。
MYSQLI_SET_CHARSET_NAME 文字コードのデフォルト値
MYSQLI_READ_DEFAULT_FILE my.cnf の代わりに、指定した名前のファイルから 設定を読み込みます。 mysqlnd ではサポートされていません。
MYSQLI_READ_DEFAULT_GROUP my.cnf の指定した名前のグループ、あるいは MYSQL_READ_DEFAULT_FILE で指定したファイルから 設定を読み込みます。 mysqlnd ではサポートされていません。
MYSQLI_SERVER_PUBLIC_KEY RSA 公開鍵ファイル。SHA-256 ベースの認証で使います。 PHP 5.5.0 以降で利用可能です。
MYSQLI_OPT_NET_CMD_BUFFER_SIZE 内部のコマンド/ネットワークバッファのサイズ。 mysqlnd でのみ有効です。
MYSQLI_OPT_NET_READ_BUFFER_SIZE MySQL コマンドパケットのボディを読み込むときの、読み込みチャンクの最大バイト数。 mysqlnd でのみ有効です。
MYSQLI_OPT_INT_AND_FLOAT_NATIVE プリペアドステートメントを使わない場合に、 integer 型と float 型のカラムを PHP の数値に変換します。 mysqlnd でのみ有効です。
MYSQLI_OPT_SSL_VERIFY_SERVER_CERT サーバーの証明書を検証するかしないかを指定します。

value

オプションに設定する値。

戻り値

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

エラー / 例外

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

mysqli_real_connect() を参照ください。

注意

注意:

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

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

参考

  • mysqli_init() - MySQLi を初期化し、mysqli_real_connect() で使うオブジェクトを返す
  • mysqli_real_connect() - mysql サーバーとの接続をオープンする

add a note

User Contributed Notes 6 notes

up
8
php at darkain dot com
6 years ago
There is an undocumented option: MYSQLI_OPT_READ_TIMEOUT. This is similar to MYSQLI_OPT_CONNECT_TIMEOUT in theory, but has a slightly different application. Connection timeout only specifies the wait time for the initial TCP connection. Once that is created, the timeout no longer applies. Read timeout, however, is from the time the TCP connection is created until the first packet of actual data is received. There are instances where a TCP connection can be established, but the MySQL server stalls indefinitely, preventing execution from ever returning to PHP. Specifying a read timeout alleviates this condition, whereas connect timeout wouldn't.

If the MYSQLI_OPT_READ_TIMEOUT constant isn't defined, it is still supported on versions where that isn't the case. You can define it yourself in older PHP versions with the following code.

<?php
if (!defined('MYSQLI_OPT_READ_TIMEOUT')) {
define ('MYSQLI_OPT_READ_TIMEOUT', 11);
}
?>

You can then use read timeout the same way you could a connect timeout as follows. Please note that since these are two different timeout values for two different parts of the entire connection process, the timeouts do stack (eg: 10 seconds connect timeout + 10 seconds read timeout = maximum possible timeout of 20 seconds)

<?php
//create the object
$connection = mysqli_init();

//specify the connection timeout
$connection->options(MYSQLI_OPT_CONNECT_TIMEOUT, 10);

//specify the read timeout
$connection->options(MYSQLI_OPT_READ_TIMEOUT, 10);

//initiate the connection to the server, using both previously specified timeouts
$connection->real_connect('server', 'user', 'pass', 'database');
?>
up
8
fluppy
17 years ago
Here es little example to create a SSL Connection

<?php

$db
= mysqli_init();

/*
When you want so use a separate cnf
$test = $db->options(MYSQLI_EAD_DEFAULT_FILE,'myother.cnf');
*/

$db->ssl_set('server-key.pem','server-cert.pem',
'cacert.pem',NULL,NULL);

$db->real_connect('localhost','root','','mydb');

//Here some query

$db->close();

?>
up
2
Procedural Man
2 years ago
Although it is not explained on the manual, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT is an option only valid for mysqlnd and will raise an error if used with mysqli.
up
1
puneetsharam9 at hotmail dot com
2 years ago
With Objective Approach
init of mysqli is depreciated from 8.1 it seem so
You could have to use an empty __construct()
So You have proper int and float

class DB extends \mysqli {
private function __construct(
private $_user = DBUSER,
private $_pass = DBPWD,
private $_dbName = DBNAME,
private $_dbHost = DBHOST,
) {
parent::__construct();
parent::options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);
parent::real_connect($this->_dbHost, $this->_user, $this->_pass, $this->_dbName);
}
}
up
2
Guy Sartorelli
1 year ago
The `MYSQLI_OPT_SSL_VERIFY_SERVER_CERT` seems to always fail, with `options()` always returning false.
Use the `MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT` flag with `real_connect()` instead.
up
-2
king at bobfish dot org
16 years ago
Example on using mysqli_options to increase size of max_allowed_packet for working with big blobs.

function dbConnect()
{
$user = 'jomama';
$pass = 'cartoon';
$dbName = 'LifeCycle';
$host = 'localhost';

$mysqli = mysqli_init();
mysqli_options($mysqli,MYSQLI_READ_DEFAULT_GROUP,
"max_allowed_packet=50M");
mysqli_real_connect($mysqli,$host, $user, $pass,$dbName)
or die ('<P>Unable to connect</P>');

return $mysqli;
}