【问题标题】:mysql insert inside foreach is not working? [duplicate]mysql 在 foreach 中插入不起作用? [复制]
【发布时间】:2015-09-04 21:54:44
【问题描述】:

我试图弄清楚为什么 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

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

任何帮助将不胜感激。

【问题讨论】:

  • 你在哪里执行查询?从您显示的代码来看,它刚刚被构建。
  • 同时显示查询代码。我怀疑您使用的扩展程序不允许多查询。
  • 对不起,我编辑了我的问题!
  • 如果你想一次做多个查询,你必须使用mysqli_multi_query()。你必须在查询之间加上;
  • 首先,你应该逃避你的输入。由于有多个查询,PDO 将特别适合。您也可以执行INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); 之类的操作,但准备好的语句会有点复杂。

标签: php mysql


【解决方案1】:

改变你的循环,让你每次都执行查询:

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.了解preparedstatements

【讨论】:

  • 这个旧答案不安全/不稳定,不应使用。应改为使用准备好的语句。 (并且我们在 Stack Overflow 上有很多重复项展示了这种技术)这个页面可能应该被关闭和删除,而不是由于冗余而改进。
【解决方案2】:

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

$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);

【讨论】:

  • 这个旧答案不安全/不稳定,不应使用。应改为使用准备好的语句。 (并且我们在 Stack Overflow 上有很多重复项展示了这种技术)这个页面可能应该被关闭和删除,而不是由于冗余而改进。
【解决方案3】:

您需要在循环内执行查询才能插入多次。

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

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

您还应该考虑使用准备好的语句。

【讨论】:

  • 这个旧答案不安全/不稳定,不应使用。应改为使用准备好的语句。 (并且我们在 Stack Overflow 上有很多重复项展示了这种技术)这个页面可能应该被关闭和删除,而不是由于冗余而改进。
猜你喜欢
  • 1970-01-01
  • 2018-03-14
  • 2011-08-27
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多