2012-11-29 146 views
0

我尝试在我的表更新多条记录,以便我只是得到了更新的最后一条记录我想知道是否there's什么不对这个脚本..这是完整的代码http://pastie.org/5453954更新MySQL中的多条记录

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"); 
+0

尝试打印$ _POST ['id_servtype'],看看你正在迭代,也许它不是你认为它应该是 –

+0

我刚刚打印出来,即时获得相同的价值每行无论我改变..这是发生在$ servtype = $ _POST ['id_servtype'];和 $ project = $ _POST ['id_project']; – adavia

回答

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的结果被更新一共有三次,每次撤销上次更新

+0

你的意思是“始终如一”。我需要id和iditem值来更新这些记录。我通过_GET获取id – adavia

+0

@ user1763639:在上面的例子中,把'$ newVals'看作你的'$ _POST'数组中的一个,将硬编码的'1'看作GET'id。每当你通过循环时,你更新相同的记录 –

+0

@ user1763639:由_always同样我的意思是,对于循环中的每个UPDATE查询,WERE子句将是相同的:只有1个GET变量被反复使用。我不是故意说每个请求都会更新与其他任何请求相同的记录 - 只是每个请求都会更新由where子句多次指定的记录 –