繁体   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