我正在尝试使用 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 会运行该文件两次。