Php 使用Foreach使用数组更新MySQL表
这让我很恼火,所以请帮帮我 我正在尝试用数组更新Mysql表 像这样的Php 使用Foreach使用数组更新MySQL表,php,mysql,arrays,foreach,Php,Mysql,Arrays,Foreach,这让我很恼火,所以请帮帮我 我正在尝试用数组更新Mysql表 像这样的 $a = array('1', '2', '3'); foreach($a as $id){ mysql_query("UPDATE table SET id = '$id' WHERE column = 'something'") or die(mysql_error()); } 因此,在更新之后,id列应该有值1、2、3 相反,它更新为1,1,1 不完全是我想要的 有人能告诉我我做错了什么吗 提前感谢。您是否更改
$a = array('1', '2', '3');
foreach($a as $id){
mysql_query("UPDATE table SET id = '$id' WHERE column = 'something'") or die(mysql_error());
}
因此,在更新之后,id列应该有值1、2、3
相反,它更新为1,1,1
不完全是我想要的
有人能告诉我我做错了什么吗
提前感谢。您是否更改了真实代码中的
where
-语句?现在,您正在覆盖column='something'所在的每一行,这意味着每一行都将在每次更新时以相同的内容结束
编辑:回复评论
好的,您需要一个非静态的WHERE
-语句。你可以在我的帖子里做一些编辑
$a = array('1' => 'something1', '2' => 'something2', '3' => 'something3');
foreach($a as $id => $where){
mysql_query("UPDATE table SET id = '$id' WHERE column = '$where'") or die(mysql_error());
}
您是否更改了真实代码中的
where
-语句?现在,您正在覆盖column='something'所在的每一行,这意味着每一行都将在每次更新时以相同的内容结束
编辑:回复评论
好的,您需要一个非静态的WHERE
-语句。你可以在我的帖子里做一些编辑
$a = array('1' => 'something1', '2' => 'something2', '3' => 'something3');
foreach($a as $id => $where){
mysql_query("UPDATE table SET id = '$id' WHERE column = '$where'") or die(mysql_error());
}
我没有看到“where”条件在循环中发生变化。每次执行“WHERE column='something'”时,它将匹配并替换所有行,覆盖以前每次更新的ID 更新: 我们中的一些人同时写了类似的回复。我应该在“添加”之前再点击一次“刷新” 值得一提的是,如果这是一个一次性修复程序,可以在表上获取顺序ID,那么您可以使用straight mysql:
mysql> select * from foo;
+------+------+
| id | name |
+------+------+
| 0 | aaa |
| 0 | bbb |
| 0 | ccc |
| 0 | ddd |
+------+------+
4 rows in set (0.00 sec)
mysql> set @ct=0;
Query OK, 0 rows affected (0.00 sec)
mysql> update foo set id=(@ct:=@ct+1);
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> select * from foo;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 4 | ddd |
+------+------+
4 rows in set (0.00 sec)
如果愿意,请使用“订购人”,例如:
mysql> update foo set id=(@ct:=@ct+1) order by name
我没有看到“where”条件在循环中发生变化。每次执行“WHERE column='something'”时,它将匹配并替换所有行,覆盖以前每次更新的ID 更新: 我们中的一些人同时写了类似的回复。我应该在“添加”之前再点击一次“刷新” 值得一提的是,如果这是一个一次性修复程序,可以在表上获取顺序ID,那么您可以使用straight mysql:
mysql> select * from foo;
+------+------+
| id | name |
+------+------+
| 0 | aaa |
| 0 | bbb |
| 0 | ccc |
| 0 | ddd |
+------+------+
4 rows in set (0.00 sec)
mysql> set @ct=0;
Query OK, 0 rows affected (0.00 sec)
mysql> update foo set id=(@ct:=@ct+1);
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> select * from foo;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 4 | ddd |
+------+------+
4 rows in set (0.00 sec)
如果愿意,请使用“订购人”,例如:
mysql> update foo set id=(@ct:=@ct+1) order by name
foreach中的每个update语句每次都作用于同一行或一组行。在您的示例中,使用“where column='something'”。如果foreach循环的每次迭代都没有改变,那么您将继续更新相同的行 foreach中的每个update语句每次都作用于同一行或同一组行。在您的示例中,使用“where column='something'”。如果foreach循环的每次迭代都没有改变,那么您将继续更新相同的行 如果您的
中的条件是静态的,您不打算覆盖相同的行吗?在您的示例中,它会一次又一次地更新相同的行,因此最后ID将是3,3,3。你能发布你的实际代码吗?缺少一些东西。如果所有行的列中都有某个内容,则所有行都应以ID 3结尾。这是准确的密码吗?你能列出前后的表格行吗?如果你的where
条件是静态的,你不打算覆盖相同的行吗?在你的例子中,它会一次又一次地更新相同的行,所以最后的ID是3,3,3。你能发布你的实际代码吗?缺少一些东西。如果所有行的列中都有某个内容,则所有行都应以ID 3结尾。这是准确的密码吗?你能列出前后的表格行吗?哇,这是多么好的回答啊。在实际代码中,我只更改字段的名称,与此没有太大区别。我刚刚删除了where子句,正如您所说,它用相同的值更新了所有行。那么,我如何重新编写整个内容,使其不更新具有相同值的所有行呢?哇,这是一个多么好的响应啊。在实际代码中,我只更改字段的名称,与此没有太大区别。我刚刚删除了where子句,正如您所说,它用相同的值更新了所有行。那么,如何重新编写整个内容,使其不更新具有相同值的所有行呢?我的表有两个字段id和position。假设查询更新id字段。我的表有两个字段id和位置。这个查询应该会更新id字段谢谢你们帮我。我很困惑,我将不得不更多地思考我真正想要的是什么。我很快就回来报到。再次感谢汉克斯帮我的忙。我很困惑,我将不得不更多地思考我真正想要的是什么。我很快就回来报到。再次感谢