MySQL不会更新表中最后一行的最后一个单元格

时间:2010-09-18 22:32:04

标签: php mysql

我正在使用PHP和MySQL。

MySQL不会更新我表格中的最后一个单元格。我无法弄清楚原因。

基本上,我在数组上使用foreach()循环执行10次INSERT。在每个循环中,我使用以下代码:

$sql = "INSERT INTO table1 (name, address, phone, date_time, process_started, process_ended)
    VALUES
    ('$name', '$address', '$phone', NOW(), 'started', '')";
$result = @mysql_query($sql, $con) or die(mysql_error());

工作正常;所有信息都插入到表格中。

然后,当我返回更新“process_ended”字段时,它会更新前9行。但它不会更新第10行的“process_ended”单元格。

以下是更新的代码。它不使用循环;我只是在脚本中键入了10次。

$sql = "UPDATE table1 SET process_ended = 'ended' WHERE name = '$name' && address = '$address'";
$result = @mysql_query($sql, $con) or die(mysql_error());

我已经检查过以确保名称和地址单元符合脚本中的内容;他们这样做。我还进行了三次检查以确保我的脚本中没有拼写错误。

我认为这与MySQL有关,因为当我切换更新的顺序时,它总是最后一个不更新的单元格。我删除了表并重新制作它,我也点击了cPanel中的修复DB按钮,它说它没问题。

8 个答案:

答案 0 :(得分:1)

也许UPDATE反对更新空字符串。您是否使用占位符而非“?”

进行了尝试

答案 1 :(得分:1)

两个循环:串行还是并行?如果循环是独立的,那么检查第一个是否在第二个循环之前完成。

答案 2 :(得分:0)

通常这是我调试的方式。

  1. 不执行查询
  2. 回复语句或将其保存到文件
  3. 分析它!在您的情况下,我认为在最后一个语句中 process_ended被省略
  4. 如果没有,请运行最后一个SQL语句。收到错误消息并将其发布在此处!
  5. 祝你好运。

答案 3 :(得分:0)

我不太确定,但我遇到了与PHP数组类似的问题。对我来说,它看起来像是php中的行尾字符,只是trim()插入前的最后一个单元格值。这解决了我的问题。

答案 4 :(得分:0)

PHP数组从0开始计算。

如果您的脚本从某处开始计数,则第一项或最后一项可能会消失。

答案 5 :(得分:0)

它不会是mySQL。数十亿的表每天都会更新这个错误会导致一个巨大的问题。将update语句更改为SELECT语句并查看结果,检查是否返回了重复的行。

$sql = "SELECT FROM table1 WHERE name = '$name' && address = '$address'";
$result = @mysql_query($sql, $con) or die(mysql_error());

问题很可能发生在你的WHERE子句中,我猜你会发现你正在运行两次相同的语句。因此update语句两次更新同一行。

您运行更新查询的顺序无关紧要。因为它每次更新表中的相同行,因此当您列出行时,它似乎是不更新的行(它是)。它恰好是它可能是第一个或第七个的最后一个。

创建语句时可能出现复制和粘贴错误。我一直这样做:(

DC

答案 6 :(得分:0)

使用MySQL,我总能找到找到这样的错误的最好方法是手动尝试。 做一个你试图运行的屏幕上的echo $sql行,然后把它放到PHPMyAdmin中,看看它回来了。

这应该可以帮助您查明问题。

答案 7 :(得分:0)

不使用循环是不好的,不使用抽象的insertitemtotable() - 类型函数很糟糕,从一开始就正确地设计你的东西,一旦你的永远不会看到那种问题基本功能已经清理干净。

此外,这将极大地帮助确保所有输入都被正确转义等等。

您的代码中肯定存在手动输入和复制/粘贴的问题,例如更新两次9次或类似的事情。