【问题标题】:How to connect PHP to MySQL as an interactive connection is it will use interactive_timeout instead of wait_timeout?如何将 PHP 连接到 MySQL 作为交互式连接,它将使用 interactive_timeout 而不是 wait_timeout?
【发布时间】:2020-10-03 22:46:18
【问题描述】:

所以,MySQL 有wait_timeoutinteractive_timeout。默认情况下,我们使用的 MySQL 连接使用wait_timeout。我想使用interactive_timeout 与用户建立联系,这样超时就不会干扰用户交互。如何创建交互式连接?

我当前的代码是这样的:

$db_conn = mysqli_connect(HOSTNAME, DBUSERNAME, DBPASSWORD,DATABASE); 

【问题讨论】:

  • 您打算如何让 PHP 脚本具有交互性?
  • 为什么不为非交互会话增加wait_timeout
  • 您打算将它与诸如棘轮之类的套接字服务器一起使用还是与常规网络服务器一起使用?

标签: php mysql timeout mysql-connect mysqlconnection


【解决方案1】:

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_interactive_timeout

“服务器在关闭交互式连接之前等待其活动的秒数。交互式客户端定义为使用 mysql_real_connect() 的 CLIENT_INTERACTIVE 选项的客户端。另请参见 wait_timeout。”

并且,来自 PHP:

https://www.php.net/manual/en/mysqli.real-connect.php

【讨论】:

    【解决方案2】:

    即使您已阅读文档,也不清楚interactive_timeout 的含义。

    表示如果交互式客户端的连接空闲时间过长,连接会自动关闭。这不会干扰任何用户交互,因为如果他们正在运行查询,根据定义,连接不会空闲。

    wait_timeoutinteractive_timeout 的默认值都是 28800 秒(8 小时)。因此,客户端必须在连接因不活动而超时之前保持打开连接 8 小时。这不太可能影响任何 PHP 请求,一旦请求完成就会关闭。

    文档中也没有提到使用interactive_timeout 的唯一现有客户端是mysql command-line client

    PHP、Java、ODBC、Python、Perl 等语言的所有连接器都使用常规 wait_timeout。我还没有看到任何可以选择使用interactive_timeout 的连接器。编程连接器不被认为是交互式的,即使它们所连接的应用程序接受用户输入。

    即使是新的 MySQL Shell 客户端也没有启用interactive_timeout。它依赖于其他客户端使用的传统wait_timeout

    【讨论】:

      猜你喜欢
      • 2019-02-08
      • 2014-01-31
      • 2023-03-22
      • 2022-01-22
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多