• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • mysqli::options()

    (PHP 5, PHP 7)

    设置选项

    说明

    面向对象风格
    mysqli::options(int $option, mixed $value): bool
    过程化风格
    mysqli_options(mysqli$link,int $option, mixed $value): bool

    设置一个连接的扩展选项,这些选项可以改变这个连接的行为。

    如果要对多个选项进行设置,可以多次调用此函数来。

    mysqli_options()需要在mysqli_init()函数之后、mysqli_real_connect()函数之前被调用。

    参数

    $link

    仅以过程化样式:由mysqli_connect()或mysqli_init()返回的链接标识。

    $option

    要进行设置的选项,可以是下列中的某一项:

    有效的选项
    名称描述
    MYSQLI_OPT_CONNECT_TIMEOUT连接超时设置,以秒为单位(在 Windows 平台上,PHP 5.3.1 之后才支持此选项)。
    MYSQLI_OPT_LOCAL_INFILE启用或禁用LOAD LOCAL INFILE语句
    MYSQLI_INIT_COMMAND成功建立 MySQL 连接之后要执行的 SQL 语句
    MYSQLI_READ_DEFAULT_FILE从指定的文件中读取选项,而不是使用my.cnf中的选项
    MYSQLI_READ_DEFAULT_GROUPmy.cnf或者MYSQL_READ_DEFAULT_FILE指定的文件中读取指定的组中的选项。
    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

    更新日志

    版本说明
    5.5.0新增MYSQLI_SERVER_PUBLIC_KEYMYSQLI_SERVER_PUBLIC_KEY选项。
    5.3.0新增MYSQLI_OPT_INT_AND_FLOAT_NATIVEMYSQLI_OPT_NET_CMD_BUFFER_SIZEMYSQLI_OPT_NET_READ_BUFFER_SIZEMYSQLI_OPT_SSL_VERIFY_SERVER_CERT选项。

    范例

    参见mysqli_real_connect()。

    注释

    Note:

    MySQLnd 总是使用服务器的默认字符集。此字符集在连接握手/认证时发送,并被 mysqlnd使用。

    Libmysqlclient 使用my.cnf中的默认字符集或者由在调用mysqli_init()之后,mysqli_real_connect()之前先调用mysqli_options()来指定。

    参见

    • mysqli_init() 初始化 MySQLi 并返回一个资源类型的值,这个值可以作为 mysqli_real_connect()函数的传入参数
    • mysqli_real_connect() 建立一个 MySQL 服务器连接
    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();
    ?>
    
    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;
    }