这非常奇怪,它让我发疯,我有一份制造商名单,必须不时更新。我必须选择最旧的更新,然后将当前时间写为最后更新时间。
问题是更新查询更新了两行而不是一行。它使用正确的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缓存或类似的东西有关吗?
非常感谢你的帮助!
答案 0 :(得分:0)
感谢Mark B(见评论)我发现浏览器是原因。更确切地说是Chrome中的firePHP插件。我禁用它后,一切恢复正常。
出于某种原因,firePHP使浏览器在没有回显时调用页面两次。