表单输入数组到 MySQL DB

Posted

技术标签:

【中文标题】表单输入数组到 MySQL DB【英文标题】:Form Input Array to MySQL DB 【发布时间】:2019-01-14 09:03:19 【问题描述】:

我有一个允许用户将设备添加到数据库的 html 表单。一个用户可以添加多个设备,有时设备之间唯一不同的字段是库存编号MAC地址

例如,他们可能想要添加 10 台具有相同硬件的戴尔 PC。他们可以动态添加 Inventory NumberMAC Address 字段,而不是让他们提交 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 条单独的记录插入到数据库中,但这是最好的方法吗/如何提高效率?

请忽略代码中的任何安全漏洞,仍在处理中。任何建议表示赞赏。

【问题讨论】:

您可以使用json_encode 将其添加到数据库中。对于显示,您可以使用json_decode 您应该始终使用安全查询,这一点不容忽视,因为您可能会忘记在发送到生产服务器之前进行准备。除此之外,您的代码还可以,但我认为应该发布在Code Review 如果您需要在 DB 中添加特定数据作为特定列,那么您可以使用 [PDO exec() 和 commit ][1] 。如果您不需要特定数据的特定列,您可以尝试 was hardik solanki 解释的。 [1]:w3schools.com/php/php_mysql_insert_multiple.asp 【参考方案1】:

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

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

如果您必须执行大量查询 - 这可以显着提高性能。

UPD。正如@Vatev 所建议的那样,我删除了代码示例,因为它不包含任何数据转义和验证,因此可能会导致某个项目的潜在违规行为,所以我只留下常见的想法描述。

【讨论】:

请不要发布包含 SQL 注入的答案。人们经常将这些复制到生产代码中。

以上是关于表单输入数组到 MySQL DB的主要内容,如果未能解决你的问题,请参考以下文章

PHP 从表单到MySQL DB的简单INSERT,UPDATE

PHP 表单使用动态输入插入数据数组

使用 Ajax、PHP、MYSQL 更新表单

通过多个表单输入的 PHP 数组

将多个表单输入绑定到 vuex 存储数组

MS Access 将链接表更改为 AWS MySQL Db 会减慢表单/报告的速度