【问题标题】:MySQLi Update is not working properlyMySQLi 更新无法正常工作
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 2019-08-10
    相关资源
    最近更新 更多