php - mysqli::query() 在选择查询时返回 true

标签 php mysql

我正在尝试使用 MySQL 创建一个队列(我知道,我真丢人!)。我设置它的方式是完成更新以在队列项目上设置接收者 ID,更新发生后,我通过接收者 ID 选择更新的项目。

我面临的问题是当我查询更新然后进行选择时,选择查询返回 true 而不是结果集。当发出快速请求时,这似乎会发生。

有人知道为什么会这样吗?

提前致谢。

架构:

CREATE TABLE `Queue` (
  `id` char(11) NOT NULL DEFAULT '',
  `status` varchar(20) NOT NULL DEFAULT '',
  `createdAt` datetime DEFAULT NULL,
  `receiverId` char(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

出队:

update `'.self::getTableName().'`
set
    `status` = 'queued',
    `receiverId` = '%s'
where
    `status` = 'queued'
    and `receiverId` is null
order by id
limit 1;

select
    *
from 
    `'.self::getTableName().'`
where
    `receiverId` = \'%s\'
order by id
desc limit 1

最佳答案

这听起来像是某种竞争条件。您正在使用 MyISAM,因此更新可能会被推迟(尤其是当该表的流量很大时)。

true 返回表示您的select 查询已正确完成但返回了空结果集(无行)。如果发生这种情况时您的逻辑是等待,比如 50 毫秒,然后重试,您可能会发现一切正常。

编辑:您可以尝试在执行 UPDATE 之前锁定表,直到完成最后一个 SELECT。但这可能会影响应用程序其他部分的性能。最好的办法是让你的应用程序在竞争条件下保持健壮。

关于php - mysqli::query() 在选择查询时返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12218775/

相关文章:

javascript - 有没有办法在用户按下 "print screen"按钮时隐藏图片?

php - 从多表查询中删除

mysql - SQL 选择多个列值

mysql - 自定义sql查询

SQL查询vBulletin中的新线程

php - 如何在 PHP 中将目录(在服务器中)中的多个 pdf 附加到电子邮件附件

php - 发送数据库中的 PHP 代码

php - 如何设置授权 header 以在android中调用rest api?

mysql - 将不同的表处理成 IF

mysql - Sequelize 中带有联接表的配偶关系