foreach循环中的mysql更新

时间:2013-02-20 14:18:34

标签: php mysql

我试图弄清楚如何用数组更新mysql表。

该表有3个字段:id,rate,pol_id。 “插入”非常有效:

 foreach ($rates as $rn=>$rv) {
 $sql3=mysql_query("INSERT into `rates` (`rate`, `pol_id`) 
             values ( '$rv', '$polid',)") or die ("Unable to issue query sql2:   ".mysql_error()); }

$ rates实际上来自动态输入字段。

所以我得到类似这样的例子:

id  |   rate |    pol_id
=========================
1   |   5.6  |     272  
2   |   6.3  |     272 
3   |   7.9  |     272

现在我想编辑输入字段中的值  所以我需要更新表格:

我试过这个:

foreach ($rates as $rn=>$rv) {
$sql3=mysql_query("UPDATE `rates` SET `rate`='$rv' WHERE   `pol_id`='$polid'")or die ("Unable to issue query sql3: ".mysql_error()); }

但这不起作用,它会使用最后一个值更新所有行。

ypu请帮帮我吗?

2 个答案:

答案 0 :(得分:3)

你的$ polid变量在foreach循环中没有被改变。对于rates表中具有相同pol_id(在$ polid中指定)的所有元素,这会导致where语句为 true 。这会将“所有”条目(使用pol_id = $ polid)的值设置为刚刚输入的最后一个值($ rv)。

如果您知道rate的旧值如下所示,您可以尝试在where语句中添加第二个条件:

$sql3=mysql_query("UPDATE `rates` SET `rate`='$rv' WHERE   `pol_id`='$polid' AND `rate`={old_value}")or die ("Unable to issue query sql3: ".mysql_error()); }

更好的方法是使用费率的id列(因为它保证是唯一的),首先执行查询以检索所需条目的ID,然后在更新查询中使用该ID。

$query1 = mysql_query("select id from rates where {your desired condition};
/* Assign the result of $query1 to $id */
$sql3=mysql_query("UPDATE `rates` SET `rate`='$rv' WHERE   `pol_id`='$polid' AND `id` = $id)or die ("Unable to issue query sql3: ".mysql_error()); }

你甚至可以让pol_id ='$ polid'现在不在查询中,因为id是唯一的。

答案 1 :(得分:1)

您使用密钥$ rn和值$ rv。

循环$ rate

$ polid在循环期间保持不变,因此每次更新都会影响相同的行/行。