0

我试图更新我表中的多条记录,所以我想知道这个脚本是否有问题,因为我只更新了最后一条记录。这是完整的代码http://pastie.org/5453954

 for ($i = 0; $i < count($_POST['id_servtype']); $i++){

    $servtype = $_POST['id_servtype'][$i];    
    $project = $_POST['id_project'][$i];
    $quantity = $_POST['tableQuantity'][$i];
    $pus = $_POST['tablePus'][$i];
    $puc = $_POST['tablePuc'][$i];
    $totalitem = $_POST['tableTotal'][$i];

    $sql = "update sales_order_items
    set
    id_project=?,
    id_service_type=?,
quantity=?,
    unit_price_no_tax=?,
    unit_price=?,
    total_item_imp=?
    where
    id_so=?
    and
    id_soitems=?
    ";

    $stmt = $this->dbh->prepare($sql);
    $stmt->bindValue(1, $project, PDO::PARAM_INT);
    $stmt->bindValue(2, $servtype, PDO::PARAM_INT);
    $stmt->bindValue(3, $quantity, PDO::PARAM_STR);
    $stmt->bindValue(4, $pus, PDO::PARAM_STR);
    $stmt->bindValue(5, $puc, PDO::PARAM_STR);
    $stmt->bindValue(6, $totalitem, PDO::PARAM_STR);
    $stmt->bindValue(7, $_POST["id"], PDO::PARAM_STR);
    $stmt->bindValue(8, $_POST["iditem"], PDO::PARAM_STR);
    $stmt->execute();

    }

    echo("Correct edition");
4

1 回答 1

1

您的逻辑有问题:您的WHERE子句中使用的值始终相同,因此您总是更新所有记录,每次使用新值。
从逻辑上讲,当您的脚本完成后,只有最后一次更新可见,所有以前的更新都已被覆盖。一个简单的例子:

$newVals = array(1,2,3);
while($val = array_shift($newVals))
{
    $query = 'UPDATE myDB.tbl SET someField = :val WHERE id = 1';
    $stmt = $pdo->prepare($query);
    $stmt->execute(array('val' => $val));
}

和写法一样:

UPDATE myDB.tbl SET someField = 1 WHERE id = 1;
UPDATE myDB.tbl SET someField = 2 WHERE id = 1;
UPDATE myDB.tbl SET someField = 3 WHERE id = 1;

所以 id 为 1 的记录一共更新了 3 次,每次都撤消上一次更新

于 2012-11-29T18:03:06.640 回答