1

我想确保我的 php 代码和我的网站不使用永久连接。

我使用下面的 sql 查询进行检查,但我不太了解输出,

$sql = "SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST";
$items = $connection -> fetch_all($sql);
print_r($items);

下面是输出,

Array
(
    [0] => Array
        (
            [ID] => 43
            [USER] => root
            [HOST] => localhost:52246
            [DB] => xxx_2010
            [COMMAND] => Query
            [TIME] => 0
            [STATE] => executing
            [INFO] => SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
        )

    [1] => Array
        (
            [ID] => 38
            [USER] => root
            [HOST] => localhost:52140
            [DB] => 
            [COMMAND] => Sleep
            [TIME] => 423
            [STATE] => 
            [INFO] => 
        )

)

当我点击另一个页面时,

Array
(
    [0] => Array
        (
            [ID] => 44
            [USER] => root
            [HOST] => localhost:52301
            [DB] => xxx_2010
            [COMMAND] => Query
            [TIME] => 0
            [STATE] => executing
            [INFO] => SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
        )

    [1] => Array
        (
            [ID] => 38
            [USER] => root
            [HOST] => localhost:52140
            [DB] => 
            [COMMAND] => Sleep
            [TIME] => 1026
            [STATE] => 
            [INFO] => 
        )

)

为什么总是输出两个数组?查询/睡眠是什么意思[COMMAND][STATE]它在第一个数组中说然后executing在第二个数组中变为空 - 这是否意味着一旦发送页面,数据库连接就会断开。

还有[TIME] => 0 and [TIME] => 423——是什么意思?

为什么有几个键显示不同的值,例如[HOST] => localhost:52246, [HOST] => localhost:52140, [ID] => 43, [ID] => 38,等

对不起,我可能只是问了一些愚蠢的问题......

谢谢。

编辑:

现在我在我的浏览器上关闭 phpMyadmin 后在输出中有这个,

Array
(
    [0] => Array
        (
            [ID] => 59
            [USER] => root
            [HOST] => localhost:53195
            [DB] => xxx_2010
            [COMMAND] => Query
            [TIME] => 0
            [STATE] => executing
            [INFO] => SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
        )

)

所以每当我点击我的网站时,它总是返回[STATE] => executing- 这是否意味着我的网站处于永久连接状态?

4

2 回答 2

1

您打开了一个root已空闲一段时间的用户的连接(ID 相同,并且睡眠时间很长)。有东西打开但没有关闭(可能是来自 PHPMyAdmin 的未关闭连接,或类似的东西)......

您的应用程序没有使用相同的连接(您可以从 ID 列中看到)。至于其他连接,您可以尝试KILL它并查看它是否返回。如果没有,我不会太担心。

另一件事,不要root用于登录 MySQL 服务器。创建具有有限权限的用户,并授予PROCESS权限。但是永远不要以完全特权用户的身份连接......

于 2011-02-07T16:30:07.440 回答
0

MySQL 文档对所有这些字段进行了非常全面的解释

状态“正在执行”意味着它所说的(这是您的查询),“睡眠”意味着线程正在等待来自客户端的新命令

于 2011-02-07T16:26:24.423 回答