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() 之前调用。

参数

mysql

仅过程式风格:由 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 与基于 SHA-256 的身份验证一起使用的 RSA 公钥文件。
MYSQLI_OPT_NET_CMD_BUFFER_SIZE 内部命令/网络缓冲区的大小。仅对 mysqlnd 有效。
MYSQLI_OPT_NET_READ_BUFFER_SIZE 读取 MySQL 命令数据包正文时的最大读取块大小(字节)。仅对 mysqlnd 有效。
MYSQLI_OPT_INT_AND_FLOAT_NATIVE 在使用非准备语句时将整数和浮点数列转换回 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_real_connect() 之前(但在 mysqli_init() 之后)显式调用 mysqli_options() 设置的默认字符集。

参见

添加注释

用户贡献注释 6 个注释

php at darkain dot com
6 年前
有一个未记录的选项:MYSQLI_OPT_READ_TIMEOUT。在理论上,这类似于 MYSQLI_OPT_CONNECT_TIMEOUT,但应用略有不同。连接超时仅指定初始 TCP 连接的等待时间。一旦创建了该连接,超时就不再适用。但是,读取超时是从创建 TCP 连接到接收到第一个实际数据包的时间。在某些情况下,可以建立 TCP 连接,但 MySQL 服务器无限期地停顿,阻止执行永远返回到 PHP。指定读取超时可以缓解这种情况,而连接超时则不能。

如果 MYSQLI_OPT_READ_TIMEOUT 常量未定义,则在未定义该常量的版本中仍然支持它。您可以在旧版本的 PHP 中使用以下代码自己定义它。

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

然后,您可以像使用连接超时一样使用读取超时。请注意,由于这些是整个连接过程中的两个不同部分的两个不同的超时值,因此超时会累加(例如:10 秒连接超时 + 10 秒读取超时 = 最长可能的超时时间为 20 秒)。

<?php
// 创建对象
$connection = mysqli_init();

// 指定连接超时
$connection->options(MYSQLI_OPT_CONNECT_TIMEOUT, 10);

// 指定读取超时
$connection->options(MYSQLI_OPT_READ_TIMEOUT, 10);

// 使用之前指定的超时时间启动与服务器的连接
$connection->real_connect('server', 'user', 'pass', 'database');
?>
fluppy
17 年前
以下是一个创建 SSL 连接的小例子

<?php

$db
= mysqli_init();

/*
当您想要使用单独的 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');

// 这里是一些查询

$db->close();

?>
Procedural Man
2 年前
尽管手册中没有解释,但 MYSQLI_OPT_SSL_VERIFY_SERVER_CERT 选项仅适用于 mysqlnd,如果与 mysqli 一起使用,将引发错误。
puneetsharam9 at hotmail dot com
1 年前
使用目标方法
mysqli 的初始化从 8.1 开始似乎已弃用。
您可能需要使用空 __construct()。
所以您拥有正确的 int 和 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);
}
}
Guy Sartorelli
1 年前
`MYSQLI_OPT_SSL_VERIFY_SERVER_CERT` 似乎总是失败,`options()` 总是返回 false。
改为使用 `real_connect()` 中的 `MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT` 标志。
king at bobfish dot org
16 年前
使用 mysqli_options 来增加 max_allowed_packet 大小的示例,以处理大型 blob。

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>无法连接</P>');

return $mysqli;
}
To Top