我有一个html表单,允许用户将设备添加到数据库中。一个用户可以添加多个设备项,有时设备之间唯一的不同之处是库存编号和 MAC地址。
例如,他们可能想要添加10台具有相同硬件的Dell PC。他们可以动态添加库存编号和 MAC地址字段,而不用提交10个表单。
表单输入看起来像这样;
<form method="POST" action="">
<input type="text" name="make">
<input type="text" name="model">
<input type="text" name="inv[]">
<input type="text" name="mac[]">
<input type="submit" name="submit">
</form>
我能够提交表单,print_r($_POST)
的输出为;
Array
(
[make] => Dell
[model] => Optiplex
[inv] => Array
(
[0] => 1544778
[1] => 3344558
[2] => 1644758
[3] => 9844558
)
[mac] => Array
(
[0] => 8877445
[1] => 3311554
[2] => 7788445
[3] => 3214857
)
)
在上面的示例中,我需要在mysql数据库中创建四个单独的记录。
考虑到我需要遍历这些值并分别插入它们,我有以下PHP;
$arr_inv = $_POST['inv'];
$arr_mac = $_POST['mac'];
for ($i = 0; $i < count($arr_inv); $i++) {
$sql = "INSERT INTO table (make, model, inv, mac)
VALUES ('" . $make . "', '" . $model . "', '" . $arr_inv[$i] . "','" . $arr_mac[$i];
$stmt = DB::exec($sql);
}
这确实可行,并且将4条单独的记录插入到数据库中,但这是最好的方法/如何提高效率?
请忽略该代码的任何安全漏洞,仍在进行处理。任何建议表示赞赏。
答案 0 :(得分:0)
基本上,您可以将所有行合并到一个INSERT
查询中-确切的语法可能取决于您使用的数据库,但通常应遵循以下语法:
INSERT INTO table (make, model, inv, mac)
VALUES
(make1, model1, inv1, mac1),
(make2, model2, inv2, mac2)
如果您必须执行很多查询-可以大大提高性能。
UPD。正如@Vatev所建议的那样,我删除了代码示例,因为它不包含任何转义和验证的数据,因此可能导致某人项目出现违规行为,因此,我只保留常见的想法描述。