Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Foreach使用数组更新MySQL表_Php_Mysql_Arrays_Foreach - Fatal编程技术网

Php 使用Foreach使用数组更新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 不完全是我想要的 有人能告诉我我做错了什么吗 提前感谢。您是否更改

这让我很恼火,所以请帮帮我

我正在尝试用数组更新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

不完全是我想要的

有人能告诉我我做错了什么吗


提前感谢。

您是否更改了真实代码中的
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字段谢谢你们帮我。我很困惑,我将不得不更多地思考我真正想要的是什么。我很快就回来报到。再次感谢汉克斯帮我的忙。我很困惑,我将不得不更多地思考我真正想要的是什么。我很快就回来报到。再次感谢