为什么在SELECT之后使用UPDATE改变2行而不是1行?

时间:2011-10-23 02:09:00

标签: php mysql

这非常奇怪,它让我发疯,我有一份制造商名单,必须不时更新。我必须选择最旧的更新,然后将当前时间写为最后更新时间。

问题是更新查询更新了两行而不是一行。它使用正确的manufacturer_id和下一个更新行。

另一个奇怪的事情是,如果我在两个查询之间放ECHO,那么一切正常。

我已在Mac XAMPP服务器,Windows XAMPP服务器和Linux服务器(Hostgator)上进行了测试。它只能在Windows服务器上运行,在Mac和Linux上,更新查询会影响2行而不是1行。

请测试以下脚本:

制作文件test.php并粘贴以下代码:

$connection = mysql_connect('localhost', 'root', '') 
    or die("Unable to connect to MySQL");
$select = mysql_select_db('test',$connection) 
     or die("Could not select test");

$sql = '
SELECT manufacturer_id FROM
manufacturer
ORDER BY last_update LIMIT 1
';

$query = mysql_query($sql, $connection);
$manufacturer = mysql_fetch_assoc($query);

//echo $manufacturer['manufacturer_id'];

$sql = 'UPDATE manufacturer
SET last_update = '.time().'
WHERE manufacturer_id ='. $manufacturer['manufacturer_id'];
mysql_query($sql, $connection);

创建数据库测试并运行以下SQL查询以创建表manufacturers

CREATE TABLE `manufacturer` (
  `manufacturer_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `last_update` bigint(15) DEFAULT NULL,
  PRIMARY KEY (`manufacturer_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

LOCK TABLES `manufacturer` WRITE;
/*!40000 ALTER TABLE `manufacturer` DISABLE KEYS */;

INSERT INTO `manufacturer` (`manufacturer_id`, `last_update`)
VALUES
(1,0),
(2,0),
(3,0),
(4,0);

/*!40000 ALTER TABLE `manufacturer` ENABLE KEYS */;
UNLOCK TABLES;

调用test.php然后检查表以查看受影响的行数。 如果只有一行受到影响,那么它在您的服务器(可能是Windows)上按预期工作。

如果两行受到影响,那么它在您的服务器上也会有同样的奇怪行为。现在取消选中回显线,你会发现它现在按预期工作。疯狂!!!

这是什么?这就像有人在欺骗我。有人知道为什么会这样吗?

你认为这与某些mysql缓存或类似的东西有关吗?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

感谢Mark B(见评论)我发现浏览器是原因。更确切地说是Chrome中的firePHP插件。我禁用它后,一切恢复正常。

出于某种原因,firePHP使浏览器在没有回显时调用页面两次。