form输入数组到mysql数据库

hof1towb  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(207)

我有一个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个单独的记录插入到数据库中,但这是最好的方法/如何提高效率?
请忽略代码的任何安全缺陷,仍在处理它。任何建议都将不胜感激。

zpf6vheq

zpf6vheq1#

基本上,您可以将所有行合并为一行 INSERT 查询-精确语法可能取决于您使用的数据库,但通常应如下所示:

INSERT INTO table (make, model, inv, mac)
VALUES
(make1, model1, inv1, mac1),
(make2, model2, inv2, mac2)

如果您必须执行大量的查询,那么可以显著提高性能。
升级。正如@vatev相当建议的那样,我删除了代码示例,因为它不包含任何转义和验证的数据,所以它可能会导致某个项目中的潜在漏洞,所以我只留下共同的想法描述。

相关问题