【问题标题】:Updating separate MSSQL records in a loop, based on a shared ID基于共享 ID 在循环中更新单独的 MSSQL 记录
【发布时间】:2013-12-17 13:31:24
【问题描述】:

我有一个表单,其中有几个字段设置为数组,因此:

<input type="text" name="proj[]" id="proj[]" value="<?php echo $proj[0]; >?" />
<input type="text" name="budget[]" id="budget[]" value="<?php echo $budget[0]; >?" />

(为简洁起见,某些代码功能,如 htmlspecialchars,已被编辑。)

有四个这样的分组,在 INSERT 时,会创建四个单独的记录。

<?php for($i=0; $i<=3; $i++) {
$new = $con->prepare("INSERT INTO table (proj, budget, formId) 
VALUES(:proj, :budget, :formid)");
$data = array('proj'=>$_POST['proj'][$i],
'budget'=>$_POST['budget'][$i],'formid'=>$formId);
//formId comes from a calculation performed elsewhere (x=x+1)
$new->execute($data);
} ?>

插入工作正常,我可以在查询数据库后调用记录并将它们显示在我的表单上。

<?php while($row = $data->fetch(PDO::FETCH_BOTH)) {
$proj[] =   $row['proj'];
$budget[] = $row['budget'];
} ?>

然而,在更新它们时,我遇到了麻烦。我不知道如何更新各个行。这是我迄今为止尝试过的:

<?php for($i=0; $i<=3; $i++) {
$upd = $con->prepare("UPDATE table SET proj=:proj, budget=:budget
WHERE formId = :formid");
$data = array('proj'=>$_POST['proj'][$i], 'budget'=>$_POST['budget'][$i],
'formid'=>$_SESSION['formId']);
$upd->execute($data);
}

这就是我卡住的地方。我不知道如何告诉 MSSQL 我正在更新具有相同 formId 的单独行。上面的代码只是将所有内容都设置为 NULL。我也试过 $_SESSION['formId']​​[$i] (给会话变量一个索引),这只是将第一行重复了三遍。现有数据会被 proj[1] 和 budget[1] 中的任何内容覆盖。

所以如果用户将 proj[1]=100 改为 proj[1]=50, 如果他采用 proj[2]=50 并将其更改为 proj[2]=100,我需要将其反映在相应的数据库记录中。不变的一切都需要保持不变。想法?我觉得我很接近了,但缺少一些明显的东西。

【问题讨论】:

  • 它们都具有相同的形式,但必须有一些独特的东西可以添加到您的 WHERE 语句中以使更新独一无二。
  • @DigitalChris:每一行都有一个自动递增的 UID。我正在尝试研究如何将该 UID 与 formId 一起合并到我的 UPDATE 语句中。有什么想法吗?
  • 获取该 UID 并将其添加到 WHERE,例如 AND UID=:UID

标签: php sql sql-server


【解决方案1】:

想通了。我在 for() 循环的顶部添加了以下 SELECT 和 while() 语句:

//UID uniquely identifies each row
$getId = $con->prepare("SELECT UID FROM table WHERE formId = :formid");
$input = array('formid'=>$_SESSION['formId']);
$getId->execute($input);

//Assign the values of $row['UID'] to an array
while($row = $getId->fetch(PDO::FETCH_BOTH)) {
$uid[] = $row['UID'];

我修改了我的 UPDATE 语句以在 WHERE 子句中获取 $uid[] 的值:

WHERE formId = :formid AND UID = :uid;
$data = array('formid'=>$_SESSION['formId'], 'uid'=>$uid[$i]);

现在每一行都独立更新,只要 UID 是唯一的并与其对应的 formId 配对。

【讨论】:

    猜你喜欢
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    相关资源
    最近更新 更多