我是 PDO 和关联数组的新手,但取得了良好的进展。我已设置此代码以将 html 表单保存到单个记录集:
$str_sql = "UPDATE tbl_benutzer SET ";
foreach($_POST as $key=>$value){
if($key=='id'){continue;}
$str_sql .= $key." = :".$key.", ";
}
$str_sql = substr($str_sql,0,-2)." WHERE id = :id";
///////SAVE DATA TO DB///////
$stmt = $conn->prepare($str_sql);
$stmt->execute($_POST);
现在我想修改相同的代码以将 html 表单的内容保存到多个记录集。这是 HTML:
<input name="id[]" value="1">
<input name="tarif[]" value="A">
<input name="mitgliedschaft[]" value="X">
<input name="gebuehr[]" value="100">
<input name="id[]" value="2">
<input name="tarif[]" value="B">
<input name="mitgliedschaft[]" value="Y">
<input name="gebuehr[]" value="200">
<input name="id[]" value="3">
<input name="tarif[]" value="C">
<input name="mitgliedschaft[]" value="Z">
<input name="gebuehr[]" value="300">
这是 $_POST 数组:
Array ( [id] => Array ( [0] => 1 [1] => 2 [2] => 3 )
[tarif] => Array ( [0] => A [1] => B [2] => C )
[mitgliedschaft] => Array ( [0] => X [1] => Y [2] => Z )
[gebuehr] => Array ( [0] => 100 [1] => 200 [2] => 300 ) )
这是我到目前为止所尝试过的,但我的头脑就是无法绕过它!:
$str_sql = "UPDATE tbl_stamm_tarif SET ";
foreach($_POST as $key=>$value){
if($key=='id'){continue;}
$str_sql .= $key." = :".$key.", ";
}
$str_sql = substr($str_sql,0,-2)." WHERE id = :id";
echo $str_sql;
///////SAVE DATEN TO DB///////
$stmt = $conn->prepare($str_sql);
foreach($_POST as $key=>$value){
foreach($value as $key2=>$value2){
$stmt->execute(array($key=>$value2));
}
}
预先感谢您的帮助!
最佳答案
我会考虑将您的 HTML 结构更改为:
<input name="**model_name**[**id1**][tarif]" value="A">
<input name="**model_name**[**id1**][mitgliedschaft]" value="X">
<input name="**model_name**[**id1**][gebuehr]" value="100">
<input name="**model_name**[**id2**][tarif]" value="B">
<input name="**model_name**[**id2**][mitgliedschaft]" value="Y">
<input name="**model_name**[**id2**][gebuehr]" value="200">
(对于 UPDATE
页面,您实际上不应该被允许更改 id
)
这样你就可以迭代模型:
foreach($_POST['**model_name**'] as $id=>$model){}
并像以前一样在每次迭代中执行UPDATE
。
更新
我也会对你的代码保持警惕,因为它非常容易受到 SQL 注入(inject)的攻击。在将每个 $key
的值直接写入语句之前,你应该真正根据已知列检查它的值。否则,用户可以提交自己的 $key
并打开您的数据库。
更新2
要么从数据库中提取列,要么将它们硬编码到您用作数组的任何 PHP 模型类中(节省了时间,但如果更改架构则需要这样做)。
在运行 SQL 之前,我可能会将 $_POST
数组中的值分配给模型类中的键控数组,因为稍后您可能需要它们。
注意
许多这些问题已经在各种框架中得到解决;不知道你的项目是什么(可能正在编写一个框架),但对于任何偶然发现这个框架的人来说都可以节省大量的工作和安全漏洞!
关于php - 如何通过 PDO 迭代 $_POST 以更新数据库中的多个记录集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29253765/