问题描述
我有一个 MySQL 数据库,作为 web 应用程序的一部分,我正在对它运行非常简单的查询。我从今天开始收到用户的报告,他们收到错误消息,说他们的帐户不存在,当他们再次登录时,它确实存在(这种情况只发生在少数人身上,而且每个人只发生一次,所以很明显是稀有的)。根据我的后端代码,只有在同一查询第一次返回 0 行,第二次返回 1 行时才会发生此错误。我的查询基本上是 SELECT * FROM users WHERE username="..."
。这怎么可能?我怀疑是硬盘出现 I/O 故障,但我不确定,因为我不希望 MySQL 在这种情况下静默失败。也就是说,我不知道还能是什么。
解决方法
这可能是您的 mysql 客户端的错误(虽然我不确定您的代码结构如何,但它可能只是错误的查询)。但是,让我们假设您的查询到目前为止一直运行良好,之前没有出现任何问题,因此我们将排除错误代码。
考虑到这一点,我假设它要么是您的 mysql 客户端中的错误,要么是您达到了最大连接数(我以前的主机 - Hostinger 有此问题)。
假设您的问题是 mysql 客户端中的错误,请通过运行此命令将会话设置为每个会话
SET SESSION optimizer_switch="index_merge_intersection=off";
或者在你的 my.cnf 中你可以全局设置它
[mysqld] optimizer_switch=index_merge_intersection=off
至于最大连接,您可以增加 max_connection 值(取决于您的主机是否允许),或者您必须制定一个逻辑来在查询执行后关闭 mysql 连接。
$mysqli->close();