我有一个数组,我想从中填充表记录,不幸的是它只会填充数组的第一条记录。我预计我的增量声明不正确,但无法找到可行的组合。另外我想'$ mtcelogID = $ siteNAME。'。'。$ Maindate。'。'。$ i;'让ID的最后一部分递增
$mtcelogARRAY = $objPHPExcel->setActiveSheetIndex(2)->rangeToArray('A8:A18');
$num_mtcelog = count($mtcelogARRAY); // Here get total count of row in that Excel sheet
for( $i=0; $i<=$num_mtcelog; $i++ ){
$sql_mtcelog = "INSERT INTO `maintenance_log`(`mtcelogID`,`mtcelogTYPE`,`MaintenanceID`) VALUES (?,?,?)";
$query_mtcelogARRAY = mysqli_prepare($link, $sql_mtcelog);
$mtcelogID = $siteNAME.'.'.$Maindate.'.'.$i;
mysqli_stmt_bind_param($query_mtcelogARRAY,"sss", $mtcelogID, $mtcelogARRAY[$i][0], $MaintenanceID);
mysqli_stmt_execute($query_mtcelogARRAY);
mysqli_stmt_close($query_mtcelogARRAY);
}
上面的代码在我的PHP表中返回:
我的阵列看起来像这样:
提前致谢
答案 0 :(得分:0)
我知道你正在使用mysqli,但我会在这里留下这个PDO的答案。如果这段代码是一个小的维护脚本,那么卸载mysqli不会有任何问题。请注意,不需要绑定,只需将值作为数组传递给PDOStatement::execute()
。不用担心你有多少s
和i
。此外,foreach
是一个比for
更灵活,更简洁的结构。
$pdo = new PDO("mysql:host=localhost;dbname=mydatabase", $username, $password);
$mtcelogARRAY = $objPHPExcel->setActiveSheetIndex(2)->rangeToArray('A8:A18');
$sql_mtcelog = "INSERT INTO `maintenance_log`(`mtcelogID`,`mtcelogTYPE`,`MaintenanceID`) VALUES (?,?,?)";
$stmt = $pdo->prepare($sql_mtcelog);
foreach ($mtcelogARRAY as $i=>$arr) {
$params = ["$siteNAME.$Maindate.$i", $arr[0], $MaintenanceID];
$stmt->execute($params);
}
重要的是在循环之外准备你的陈述。准备好的陈述的主要目标之一是减少开销;通过反复准备声明,你会增加开销。