2010-09-18 115 views
4

我正在使用PHP和MySQL。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中的修复数据库按钮,它说没关系。

+5

我怀疑这是原因,但'&&'不是正常的SQL语法。你应该使用'AND'来代替。 – wuputah 2010-09-18 22:38:48

+1

@wuputah它根据手册确实在MySQL中有效,但你说得对,通常不会使用它。 – 46bit 2010-09-18 22:43:49

+0

尝试在mysql上手动添加手动添加的数据(最后一个查询的echo $ sql)并查看它是否仍然无效。 – 46bit 2010-09-18 22:45:50

回答

0

通常这是我如何调试它。

  1. 不执行你的查询
  2. 回声陈述或者将它们保存到一个文件
  3. 分析吧!在你的情况下,我认为process_ended在最后的声明中省略了
  4. 如果不是,请运行最后一条SQL语句。获取错误信息并在此发布!

祝你好运。

+0

或者像mysql_affected_rows那样精确的东西也会有所帮助。 – funwhilelost 2011-01-21 21:30:21

0

我不太清楚,但我遇到了类似的问题与PHP阵列。对我来说,它看起来像在PHP中的行尾字符,只是trim()插入前您的最后一个单元格值。这已经解决了我的问题。如果你的脚本开始从1某处计数

0

PHP数组从0

计数,第一个或最后一个项目可能会消失。

0

它不会是mySQL。数十亿的表格每天都会更新,如果是这样的话,这个bug会造成一个巨大的问题。将更新语句更改为SELECT语句并查看结果,检查返回的重复行。

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

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

因为它每次更新表中的相同行,因此当你列出行时,它看起来是一个没有更新(相同)的行,这与你在哪里运行更新查询无关。它恰好是它可能是第一个或第七个的最后一个。

创建语句时可能是复制和粘贴错误。我做这一切的时候:(

DC

1

也许更新是反对更新为空字符串。你有一个占位符,而不是'?

0

用MySQL,试了一下,我始终找不到找到这样的错误最好的办法是通过手动尝试它。 在屏幕上做一个回声$sql行你想运行,然后把它通过phpmyadmin,看看它回来了。

这应该帮助你查明问题。

1

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

0

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

此外,这将大大确保所有输入正确转义帮助等

有肯定是在你的代码的问题,你必须手工输入和复制/粘贴,如更新两次9号或类似的东西。

相关问题