在mysql中更新多个记录

时间:2012-11-29 17:56:03

标签: php mysql

我试图更新我的表中的多个记录,所以我想知道这个脚本中是否有错误因为我只是更新了最后一条记录..这是完整的代码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");

1 个答案:

答案 0 :(得分:1)

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

$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的记录总共更新三次,每次撤消上次更新