批量插入数据库

时间:2015-02-11 06:17:53

标签: php mysql sql-server

以下PHP代码在POST中只有一组数组值时工作正常,即索引值为0 ...当索引值大于1时,重复的条目将被插入表中..请帮助...

$sql = "INSERT INTO js (s_name, s_age, s_marks, s_school) VALUES ";
foreach($_POST as $objResult)
    {
    $i = 0;
    foreach($objResult as $Result){
        $i++;
        if($i>1)// add ',' after first set of values in INSERT..
        {
            $sql .= ",";
        }
        $name = $Result['sname']; 
        $age = $Result['age']; 
        $mark = $Result['mark']; 
        $school = $Result['school']; 
        $sql .= "('".$name."','" .$age."','".$mark."','" .$school."')";
$result=$conn->query($sql);
    }}           

4 个答案:

答案 0 :(得分:1)

通过执行以下操作,您可以完全消除所有迭代的问题:

foreach($_POST as $objResult) {
    foreach($objResult as $Result) {
        $sql .= "(" . implode(', ', $Result) . "),";
    }
}
$result=$conn->query($sql);

现在你注意到我是如何将查询移出你的循环的吗?这确保您正确运行它而不是每次迭代(循环)数据。


这是一个有效的Example您必须按ctrl + enter才能运行代码

答案 1 :(得分:0)

您需要移动

$result=$conn->query($sql);

离开内循环,你没有清除字符串,所以它会不断添加已添加的条目。

答案 2 :(得分:0)

感谢您的建议。我将代码更改为以下内容..

$sql = "INSERT INTO js (s_name, s_age, s_marks, s_school) VALUES ";
foreach($_POST['student'] as $Result)
	{
        $name = $Result['sname']; 
        $age = $Result['age']; 
        $mark = $Result['mark']; 
        $school = $Result['school']; 
        $sql .= "('".$name."','" .$age."','".$mark."','" .$school."'),";

    }
$sql = rtrim($sql,",");
$result=$conn->query($sql);

答案 3 :(得分:0)

你可以改变这样的代码



foreach($_POST as $objResult) {
    foreach($objResult as $Result) {
        $sql .= "(" . implode(', ', $Result) . "),";
    }
}
$result=$conn->query($sql);