错误:如何使用循环将值插入mysql?

时间:2018-06-09 13:36:41

标签: php mysql

我有这个代码允许用户输入孩子的年龄和性别,然后将它们插入到DB中。当我回应变量。我可以从用户获取所有值,因为用户可以输入多个孩子。但是,当我想插入DB时,它只会插入最后一个孩子的数据

例如为: 如果用户两个孩子一个年龄:3个性别M和第二个年龄5性别F,第二个值只会被插入

$age=$_POST['age'];
$gender=$_POST['gender'];

for($i=0;$i<count($gender);$i++)
{
    if($age[$i]!="" && $gender[$i]!="")
    {
        echo $age[$i];
        echo $gender[$i];
        $query = "INSERT INTO `children`(`age` , `gender`)VALUES('$age[$i]' , '$gender[$i]')";      
    }   
 }

 $result = mysqli_query($connection, $query);
 //echo $result;
 echo "<pre>";
 if (!$result)
 {
     die("Query Faile".  mysqli_errno($connection));   
 }

2 个答案:

答案 0 :(得分:3)

for循环完成后执行一次查询。将执行移动到循环中。这适用于准备好的语句,这也将提高程序的安全性:

$stmt =
    mysqli_prepare($connection, "INSERT INTO `children` (`age`, `gender`) VALUES (?, ?)");

for($i = 0; $i < count($gender); $i++)
{
    if($age[$i]!="" && $gender[$i]!="")
    {
        mysqli_stmt_bind_param($stmt, "ds", $age[$i], $gender[i]);
        mysqli_stmt_execute($stmt);
    }   
}

答案 1 :(得分:0)

像这样更改你的代码

**

$stmt =
    mysqli_prepare($connection, "INSERT INTO `children` (`age`, `gender`) VALUES (?, ?");
$res = false;
$count = 0;
for($i = 0; $i < count($gender); $i++)
{
    if($age[$i] != "" && $gender[$i] != "")
    {
        mysqli_stmt_bind_param($stmt, "ds", $age[$i], $gender[i]);
        if(mysqli_stmt_execute($stmt)){
          ++$count;
          $res= true;
        }
    }   
}
if(!$res){
  echo "Failed after ".$count." Data added";
}else{
  echo "Job Done";
}

**