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.
(PHP 5, PHP 7, PHP 8)
mysqli::options -- mysqli_options — Установка настроек
Объектно-ориентированный стиль
Процедурный стиль
Используется для установки дополнительных настроек соединения и поведения подключения к базе данных.
Эту функцию можно вызывать неоднократно, чтобы задать несколько настроек.
mysqli_options() нужно вызывать после mysqli_init() и перед mysqli_real_connect().
mysql
Только для процедурного стиля: объект mysqli, который вернула функция mysqli_connect() или функция mysqli_init().
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. |
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_real_connect(), но после вызова функции mysqli_connect().
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.
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');
?>
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();
?>
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);
}
}
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.
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;
}