【发布时间】:2020-03-27 19:44:19
【问题描述】:
我有一个 PHP 套接字服务器,它等待连接,然后与数据库对话以解决它们。我在测试时它工作得很好,但是当我把它放在一边时,第二天早上它就不再与数据库对话了。
当我查看我的日志时,我看到了:
200327 11:54:37 24 Connect dbuser@localhost as anonymous on dbname
24 Quit
我希望看到更多这样的东西:
200327 11:54:20 23 Connect dbuser@localhost as anonymous on dbname
23 Query SELECT * FROM table1 WHERE num=4
23 Query SELECT * FROM table2 WHERE num='4' AND info='deleted'
23 Query SELECT * FROM table3 WHERE num='4'
23 Quit
但是由于某种原因,在服务器运行了一段时间后,在初始连接之后查询就再也没有通过了。
我唯一能想到的可能是我的 PDO 对象以某种方式超时,因为我在启动服务器时创建了一次。
$dbh = new PDO($dbName,$dbUser,$dbPass);
对可能发生的事情有任何想法,如果在流程开始时创建 PDO 对象不正确,如何更好地管理该资源?
PHP 是 PHP 7.0.33,MySQL 是 10.1.44-MariaDB-0+deb9u1 Debian 9.11。
【问题讨论】:
-
您是否有任何错误/调试日志记录可以帮助您了解代码的实际作用?
-
这可能与mysql服务器的wait_timeout变量有关,默认为8小时dev.mysql.com/doc/refman/8.0/en/…
-
阿迪森:一些。我可以看到套接字服务器接收到连接,然后它运行应该生成前两个 MySQL 连接的命令。然后它返回的结果要么是“SELECT * FROM table1 WHERE num=4”,要么是 MySQL 函数没有返回。显然是后者,因为数据在表中。
-
Markownikow:谢谢,听起来很可能就是这样,因为现在除了我之外没有人在使用这个测试服务器。我很乐意接受这个答案,特别是如果您对编写服务器的最佳实践有任何建议,该服务器可能会或可能不会在任何八小时内获得连接。
-
Shannon A.:谢谢,我发布了答案