使用 mysqli bind_param 插入多行记录?
Inserting multiple row records using mysqli bind_param?
我这里有一个使用 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 bind_param
这是我所做的:
(我有connection.php
(mysqli
))
$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);
}
但仍未获取数据。
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);
}
你只是 bind_param
,仅此而已。语句应为 execute
d。即使一次调用 prepare
:
也可以执行多次
$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();
我这里有一个使用 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 bind_param
这是我所做的:
(我有connection.php
(mysqli
))
$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);
}
但仍未获取数据。
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);
}
你只是 bind_param
,仅此而已。语句应为 execute
d。即使一次调用 prepare
:
$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();