在foreach里面插入mysql是不行的?

时间:2015-09-04 21:54:44

标签: php mysql

我想弄清楚为什么foreach里面的这个MYSQL INSERT没有在mysql数据库中插入任何内容!

   // Parse the form data and add inventory item to the system
    if (isset($_POST['g_name'])) {


        $g_name =$_POST['g_name'];
        $numbers = $_POST['numbers'];

        $comma_separated = explode(", ", $numbers);


        foreach($comma_separated as $seperate){

        $sql .="INSERT INTO groups(`g_name`, `numbers`) VALUES ('$g_name','$seperate')";

        }

$query = mysqli_query($db_conx, $sql);
        header("location: groups.php"); 
        exit();
    }

如果我将$sql .=更改为$sql =,它只会在MYSQL数据库中插入一个值。

$numbers的值如下:1,2,3,4,5

有人可以就此问题提出建议吗?

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:5)

更改循环,以便每次执行查询:

foreach($comma_separated as $seperate){

    $sql ="INSERT INTO groups(`g_name`, `numbers`) VALUES ('$g_name','$seperate')";
    $query = mysqli_query($db_conx, $sql);
}

您应该记住your script is at risk for SQL Injection Attacks.了解prepared statements

答案 1 :(得分:4)

您可以使用此语法通过一个查询插入多个记录,而不是尝试执行多个查询。

$sql = "INSERT INTO groups(`g_name`, `numbers`) VALUES";
$comma = '';

foreach($comma_separated as $seperate){
    $sql .="$comma ('$g_name','$seperate')";
    $comma = ',';
}

$query = mysqli_query($db_conx, $sql);

来自MySQL documentation

  

使用VALUES语法的INSERT语句可以插入多行。为此,请包含多个列值列表,每个列值都括在括号内并用逗号分隔。

     

示例:INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

答案 2 :(得分:1)

您需要在循环内执行查询,以便多次插入。

<?php
foreach($comma_separated as $seperate) {
    $sql = "INSERT INTO groups(`g_name`, `numbers`) VALUES ('$g_name','$seperate')";

    $query = mysqli_query($db_conx, $sql);
}
?>

您还应该考虑使用准备好的陈述。