【问题标题】:Insert Multiple Rows into mysql DB将多行插入mysql数据库
【发布时间】:2011-01-04 08:15:09
【问题描述】:

如果某些字段包含数据,您将如何将多行插入数据库?考虑以下几点:

register_case = mysql_query ("INSERT INTO cases VALUES
                              ('$case','$p_firstname','$p_lastname','$city'),
                              ('$case','$p2_firstname','$p2_lastname','$city'),
                              ('$case','$p3_firstname','$p3_lastname','$city')"
                            );

这会创建多个具有不同名字和姓氏的行,但大小写和城市保持不变。但是,如果只有 1 个条目,则仍会为其他 2 个条目创建一行。如何仅在给定字段中存在数据时才创建行?

【问题讨论】:

  • 使用条件运算符动态构建此查询?

标签: php mysql insert rows


【解决方案1】:

您可以尝试一个 if 案例,它只会执行以下操作:

if (isset($field)) do thisquery 

if ($field != "") do thatquery

【讨论】:

    【解决方案2】:

    我认为这会从表单中获取信息?

    如果是这样,将输入命名为“name="firstname[]"",这将导致它们在提交时被放置在一个数组中,如 $_POST['firstname'][0],所以如果你有 3输入名为 firstname[],然后你会得到 $_POST['firstname'][0]、$_POST['firstname'][1] 和 $_POST['firstname'][2]。

    然后做这样的事情:

    $sql = 'INSERT INTO `cases` VALUES ';
    
    for($i = 0;$i < count($_POST['firstname']);$i++)
    {
        $sql .= "('$case','".$_POST['firstname'][$i]."','".$_POST['lastname'][$i]."','$city')";
        if($i != count($_POST['firstname']) - 1)
        {
            $sql .= ',';  //Will insert a comma after each except the last.  Count - 1 since $i will equal count - 1 on the last one, since it starts at 0 and not 1.
        }
    }
    
    $register_case = mysql_query($sql);
    

    我认为应该可以。

    或者,您可以执行一个 foreach 并在每个字符串上附加一个“,”,然后在完成后将其从字符串的右端修剪掉,或者执行一个 foreach 并保留一个外部计数器,该计数器在末尾手动递增。再想一想,这些都不会捕捉到姓氏,如果不做 $key=>$value 类型的事情,也不做 $_POST['lastname'][$key]。可能还需要使用 if 来检查空字符串。

    当然,您永远不想直接将 $_POST 或 $_GET 值传递给 SQL,首先验证并确保没有注入。

    【讨论】:

    • 如果你注意了,你会看到我提到他不想那样做,但对我来说更容易不用输入验证函数,使用 array_map 或什么让你使用它,然后解释我做了什么。
    猜你喜欢
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    相关资源
    最近更新 更多