簡體   English   中英

更新表mysql中的多行

[英]update multiple rows in table mysql

我想知道是否有人可以指出我正確的方向,因為我試圖更新多行,但是由於某種原因,每次我進行更新時,變量id_employee都為所有行設置了相同的值。當我var_dumped $ _POST時。 其余字段都很好。這是我的代碼的完整視圖。 http://pastie.org/5478920 ,這也是我在var_dump中獲得的http://pastie.org/5478980

    $query = "update project_staff
    set
    id_employee=?
    where
    id_project=?
    and
    id_projectemployee=?
    ";

    $stmt = $this->dbh->prepare($query);

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

    $employee = $_POST['id_employee'][$i];

    $stmt->bindValue(1, $employee, PDO::PARAM_INT);
    $stmt->bindValue(2, $_POST["id"], PDO::PARAM_INT);
    $stmt->bindValue(3, $_POST["idstaff"], PDO::PARAM_INT);

    $stmt->execute();

    }

    echo("Project" . " " . $_POST["nom"] . " ". "has been updated");

您將綁定參數設置為顯式數據類型PDO::PARAM_INT ,但FROM $ _POST的值始終為字符串。

您應該更改並驗證POST輸入為INT優先,然后將其更改為INT或使用PDO::PARAM_STR

//更新

查看您的代碼,將where子句的值設置為$ _POST ['id']和$ _POST [“ idstaff”]的內容。 因此,在每次運行時,foreach都要求相同的值。 因此,$ employee每次運行都會更新,但是where子句始終相同。 這看起來像:

//example
//$_POST['id'] = 20;
//$_POST['idstaff'] = 40;
//$_POST['id_employee'][0] = 1;
//$_POST['id_employee'][1] = 2;
//$_POST['id_employee'][2] = 3;

//run 1
$employee = $_POST['id_employee'][0]; //1
update project_staff set id_employee=1 where id_project=20 and id_projectemployee=40

//run 1
$employee = $_POST['id_employee'][1]; //2
update project_staff set id_employee=2 where id_project=20 and id_projectemployee=40

//run 1
$employee = $_POST['id_employee'][2]; //3
update project_staff set id_employee=3 where id_project=20 and id_projectemployee=40

因此,您將在每次運行時覆蓋以前的更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM