我需要帮助才能找出这个问题。我试图尽可能地简化事情。没有任何错误,这只是访问的问题,我无法理解。
想象一下:
<?php
for($i=0;$i<3;$i++){
?>
Member:
<input type="text" name="<?php echo trim("member_".$i);?>" />
<br/>
<?php
} ?>
以上代码生成:
<input name="member_1">
<input name="member_2">
<input name="member_3">
现在假设,表中的数据
org_ID (Foreign Key) member
A 1
A 2
A 3
现在来更新功能:
public function updateTo($tableName, $org_D,$member) {
try {
$stm = "update " . $tableName . " SET member = :member WHERE org_D= :org_D";
$eksekutor = $this->koneksi->prepare($stm);
$eksekutor->bindValue(":org_D", $org_D, PDO::PARAM_STR);
$eksekutor->bindValue(":member ", $member, PDO::PARAM_STR);
$eksekutor->execute();
$done = true;
} catch (PDOException $e) {
$done = false;
}
return $done;
}
最后是更新操作:
如果我这样做(这是错误的,因为它不断更新每次迭代的所有行):
for($i=0;$i<3;$i++) {
$member = $_POST["member_$i"];
$update = $kad->updateTo("table_name", $org_D, $member);
}
我需要帮助,我无法理解如何实现此更新操作:
$_POST["member_1"]; ------ UPDATE TO-------> row "member" contains 1
$_POST["member_2"]; ------ UPDATE TO-------> row "member" contains 2
$_POST["member_3"]; ------ UPDATE TO-------> row "member" contains 3
因为在更新操作中我要为每个 WHERE=
答案 0 :(得分:1)
目前,您在每次迭代中向您的数据库发送相同的UPDATE语句。如果要在每次迭代时更新单个成员,则必须将其添加到WHERE子句中。
也许你有更多的东西来引用一个成员而不是你的例子中给出的东西。否则,您必须将以前的成员值添加到where子句中。
public function updateTo($tableName, $org_D, $prevMember, $newMember) {
...
$stm = "update " . $tableName . " SET member= :newMember WHERE org_D=:org_D AND member = :prevMember";
$eksekutor = $this->koneksi->prepare($stm);
$eksekutor->bindValue(":org_D", $org_D, PDO::PARAM_STR);
$eksekutor->bindValue(":newMember", $newMember, PDO::PARAM_STR);
$eksekutor->bindValue(":prevMember", $prevMember, PDO::PARAM_STR);
...
}
答案 1 :(得分:1)
问题在于您的WHERE
条件。见这里,
...WHERE org_D= :org_D";
由于您将A
作为方法的参数传递org_D
,因此它会在for
循环的每次迭代中更新所有三行。您还需要将当前成员的ID传递给updateTo()
方法。
因此,首先按以下方式更改for
循环,
for($i=0;$i<3;$i++) {
$member = $_POST["member_$i"];
$update = $kad->updateTo("table_name", $i+1, $org_D, $member);
}
然后按以下方式更改updateTo()
方法,
public function updateTo($tableName, $oldMemberId, $org_D, $newMemberId) {
try {
$stm = "update " . $tableName . " SET member = :newMemberId WHERE member = :oldMemberId AND org_D= :org_D";
$eksekutor = $this->koneksi->prepare($stm);
$eksekutor->bindValue(":newMemberId ", $newMemberId, PDO::PARAM_STR);
$eksekutor->bindValue(":oldMemberId ", $oldMemberId, PDO::PARAM_STR);
$eksekutor->bindValue(":org_D", $org_D, PDO::PARAM_STR);
$eksekutor->execute();
$done = true;
} catch (PDOException $e) {
$done = false;
}
return $done;
}