这让我很便利,所以请帮忙。
我正在尝试使用数组更新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
更新不完全是我想要的。
有人可以表明我做错了吗。
提前致谢。
答案 0 :(得分:2)
您是否在实际代码中更改了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());
}
答案 1 :(得分:2)
foreach中的每个update语句每次都在同一行或一组行上。在您的示例中,您使用“where column ='something'”。如果在foreach循环的每次迭代中都没有改变,那么你将继续更新相同的行。
答案 2 :(得分:0)
我没有看到循环中'where'条件发生变化。每次执行“WHERE column ='something'”时,它将匹配并替换所有行,覆盖每个先前更新的ID。
更新:
我们中的一些人同时写了类似的回答。我应该在'add'之前再次点击'刷新'
对于它的价值,如果这是一次性修复以获得表上的顺序id,你可以用直接的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)
如果您愿意,请使用'order by',例如:
mysql> update foo set id=(@ct:=@ct+1) order by name