[英]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.