0

我正在尝试使用 MySQLi 用 PHP 更新我的一行,如果我在更新后不到 1 秒刷新 PHPMyAdmin,它就成功了,但是如果我只在更新后 2 秒以上检查数据,它就不会更新。

举个例子:

'UPDATE orders SET MachineID = '.$id.' WHERE OrderID = '.$OrderID.
                   'AND ProductID = '.$ProductID

除非我快速刷新,否则不起作用,但是......

'UPDATE orders SET MachineID = 2 WHERE OrderID = 4 AND ProductID = 12'

无论我刷新多久都可以使用。(这些是我通常用来测试的数据。)

所以我虽然这将是我的变量,但我在其他查询中的这部分代码之前使用它们几乎 10 次并且它工作得很好。

  • 我试图 trim() 变量,但没有帮助。
  • 我也尝试使用 mysqli_real_escape_string() 没有成功。
  • mysqli_error() 没有给我任何东西。
  • mysqli_affected_rows() 给了我“1”,这就是它的假设。
  • 奇怪的是,如果我执行'SELECT MachineID FROM orders WHERE OrderID = 4 AND ProductID = 12',即使phpMyAdmin没有更新数据,它也会给我更新的答案。

在此之后没有其他代码,因此没有任何东西可以“逆转”更新。

正常的“测试”输出如下所示:

编辑:这是浏览器输出的内容。

ID: "2" //$id
OrderID: "4" //$OrderID
ProductID: "12" //$ProductID
UPDATE orders SET MachineID = 2 WHERE OrderID = 4 AND ProductID = 12 //Query
boolean true //Result var_dump
1 //Number of rows affected
2 //Machine ID

注意:引号不是变量的一部分。

编辑:这是 PHP 代码

$query = 'UPDATE orders SET MachineID = '.$id.' WHERE OrderID = '.$OrderID.' AND ProductID = '.$ProductID;          
echo 'ID: "'.$id.'"<br/>
     OrderID: "'.$OrderID.'"<br/>
     ProductID: "'.$ProductID.'"<br/>'.$query.'<br/>';

$res = $db->query($query);
var_dump($res);

echo mysqli_affected_rows ($db).'<br/>';   
$result = $db->query('SELECT MachineID FROM orders WHERE OrderID = 4 AND ProductID = 12');      
$result = $result->fetch_array();
echo $result[0];

我真的不明白为什么它会在文件中工作并在快速刷新后工作,但如果检索数据需要很长时间则不会。如果它没有获取,它就像它会在一定时间后重置。

我已经为此工作了将近 2 天,现在我不知道为什么它不起作用。这是一些非常简单的 SQL 查询。

编辑:我查看了 MySQL 二进制日志,似乎每次都将其更新回 1。发生这种情况的唯一方法是文件是否运行两次,但如果它运行两次,为什么输出只会出现一次?

编辑:好的,所以问题似乎来自谷歌浏览器。我已经在 IE 上测试过了,它可以工作。由于某种原因,Chrome 会运行该文件两次。

4

1 回答 1

1

好的,所以我能够找到问题并解决它。

问题: 问题是 Chrome 中著名的“favicon”错误,即使该图标不存在,它也会尝试获取该图标,因此该文件被调用了两次。

修复: 由于此文件是通过 Ajax 调用调用的,因此不会触发该错误,因为 Chrome 不会尝试查找“favicon”。我基本上通过测试它应该如何运行来修复错误,而不仅仅是测试文件本身。

于 2013-02-07T14:47:36.447 回答