1

我想弄清楚如何用数组更新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()); }

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

你能帮我解决这个问题吗?

4

2 回答 2

3

您的 $polid 变量在 foreach 循环内没有被更改。这会导致您的 where 语句对于表中具有相同 pol_id(在 $polid 中指定)的所有元素都为真。rates这会将“所有”条目(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()); }

一种更好的方法是使用 rate 的 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 是唯一的。

于 2013-02-20T14:21:58.487 回答
1

您正在使用键 $rn 和值 $rv 循环 $rates。

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

于 2013-02-20T14:22:59.697 回答