Php 使用mysqli bind_参数插入多行记录?

Php 使用mysqli bind_参数插入多行记录?,php,mysqli,bindparam,Php,Mysqli,Bindparam,我这里有一个使用mysql查询的代码 $N = count($fullname); for($i=0; $i < $N; $i++) mysql_query("INSERT INTO famcomp(fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) VALUES ('$fullname[$i]','$fage[$i]','$frel[$i]','$fcivil[$i]','$fedu[$i]','$foccup[$i]','$f

我这里有一个使用mysql查询的代码

$N = count($fullname);
for($i=0; $i < $N; $i++)
    mysql_query("INSERT INTO famcomp(fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) VALUES ('$fullname[$i]','$fage[$i]','$frel[$i]','$fcivil[$i]','$fedu[$i]','$foccup[$i]','$finco[$i]','$id')");

但是仍然没有得到数据。

Mysqli编写的语句使用起来相当棘手,因此,我建议使用PDO。使用PDO,您的代码将正常工作:

$stmt = $conn->prepare("INSERT INTO famcomp(fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) VALUES (?,?,?,?,?,?,?,?)");
$N = count($fullname);
for($i=0; $i < $N; $i++) {
    $stmt->execute(array($fullname[$i],$fage[$i],$frel[$i],$fcivil[$i],$fedu[$i],$foccup[$i],$finco[$i],$id));
}
而对于mysqli,您必须首先绑定变量,然后在执行之前更改变量子集。当然,您还必须调用execute

$stmt = $conn->prepare("INSERT INTO famcomp(fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) VALUES (?,?,?,?,?,?,?,?)");
$stmt ->bind_param("ssssssss",$fullname_,$fage_,$frel_,$fcivil_,$fedu_,$foccup_,$finco_,$id);

$N = count($fullname);
for($i=0; $i < $N; $i++)
    $fullname_ = $fullname[$i];
    // and so on
    $stmt->execute();
}
请注意,当使用prepared语句时,您只需准备和绑定一次。

使用以下代码:

$N = count($fullname);
for($i=0; $i < $N; $i++)
    $stmt = $conn->prepare("INSERT INTO famcomp(fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) VALUES (?,?,?,?,?,?,?,?)");
    $stmt ->bind_param("ssssssss",$fullname[$i],$fage[$i],$frel[$i],$fcivil[$i],$fedu[$i],$foccup[$i],$finco[$i],$id);
}

如果你们在寻找解决方案。这是: 感谢那些分享他们的代码并帮助我提出解决此问题的想法的人

$stmt = $conn->prepare("INSERT INTO famcomp (fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) values (?,?,?,?,?,?,?,?)");

for ($i=0; $i<count($fullname); $i++) {
    $fullname1 = $fullname[$i];
    $fage1 = $fage[$i];
    $frel1 = $frel[$i];
    $fcivil1 = $fcivil[$i];
    $fedu1 = $fedu[$i];
    $foccup1 = $foccup[$i];
    $finco1 = $finco[$i];
    $id1 = $id;
    $stmt->bind_param('sssssssi', $fullname1, $fage1, $frel1, $fcivil1, $fedu1, $foccup1, $finco1, $id1);

    $stmt->execute();
}
echo "Done";

$stmt->close();

s代表字符/字符串数据类型。如果是整数,则使用i。例:sssissi@我明白了。结果是字符串+int。所以可以在bind_param中执行吗?@subinthoma完全没有错误,但它不会插入数据。是的。如果您的id是整数,请使用bind_paramssi,。。。。。。。。。。;是的,还是不行,还是不行。没有错误,但它无法获取数据。
$N = count($fullname);
$stmt = $conn->prepare("INSERT INTO famcomp(fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) VALUES (?,?,?,?,?,?,?,?)");
for($i=0; $i < $N; $i++)
    $stmt ->bind_param("ssssssss",$fullname[$i],$fage[$i],$frel[$i],$fcivil[$i],$fedu[$i],$foccup[$i],$finco[$i],$id);
    $stmt->execute();
}
$stmt = $conn->prepare("INSERT INTO famcomp (fullname,fage,frel,fcivil,fedu,foccup,finco,app_id) values (?,?,?,?,?,?,?,?)");

for ($i=0; $i<count($fullname); $i++) {
    $fullname1 = $fullname[$i];
    $fage1 = $fage[$i];
    $frel1 = $frel[$i];
    $fcivil1 = $fcivil[$i];
    $fedu1 = $fedu[$i];
    $foccup1 = $foccup[$i];
    $finco1 = $finco[$i];
    $id1 = $id;
    $stmt->bind_param('sssssssi', $fullname1, $fage1, $frel1, $fcivil1, $fedu1, $foccup1, $finco1, $id1);

    $stmt->execute();
}
echo "Done";

$stmt->close();