【发布时间】:2023-04-07 20:34:01
【问题描述】:
我正在尝试使用 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 会运行该文件两次。
【问题讨论】:
-
这令人困惑。您声明您正在使用 phpMyAdmin(这意味着您根本没有编写 PHP 代码),那么您的代码部分是 PHP、SQL 代码和英语的混淆组合。
-
我在 PHP 文件中编写代码,并通过 phpMyAdmin 验证更新是否真的有效。代码部分是浏览器的输出。
-
我们不知道浏览器输出是什么意思。只需输入您正在使用的代码即可。这里没有运行查询的 mysqli 代码。
-
看起来事务正在自动回滚。我认为您需要在进行更新后使用 mysqli_commit()。
-
@thatidiotguy 是的,很抱歉我添加了 PHP 代码。
标签: php phpmyadmin mysqli sql-update