Php 表仅使用数组中的一个值填充

Php 表仅使用数组中的一个值填充,php,arrays,for-loop,increment,Php,Arrays,For Loop,Increment,我有一个数组,我想从中填充表记录,不幸的是,它只会填充数组的第一条记录。我预计我的增量声明不正确,但无法找到有效的组合。此外,我希望“$mtcelogID=$siteNAME.”.$Maindate.”.$I;'使ID的最后一部分递增 $mtcelogARRAY = $objPHPExcel->setActiveSheetIndex(2)->rangeToArray('A8:A18'); $num_mtcelog = count($mtcelogARRAY); // Here ge

我有一个数组,我想从中填充表记录,不幸的是,它只会填充数组的第一条记录。我预计我的增量声明不正确,但无法找到有效的组合。此外,我希望“$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);
}
$mtcelogARRAY=$objPHPExcel->setActiveSheetIndex(2)->RangeTarray('A8:A18');
$num_mtcelog=计数($mtcelogARRAY);//这里获取Excel工作表中的行总数

对于($i=0;$i我知道您正在使用mysqli,但我将把这个PDO答案留在这里。如果这段代码是一个小的维护脚本,转储mysqli应该不会有任何问题。请注意,不需要绑定,只需将值作为数组传递给
PDOStatement::execute()
。不必担心你有多少个
s
i
。而且,
foreach
是一个比
更灵活、更不冗长的结构

$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);
}

重要的是在循环之外准备语句。准备语句的主要目标之一是减少开销;反复准备语句会增加开销。

我知道您在使用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);
}

重要的是在循环之外准备语句。准备语句的主要目标之一是减少开销;反复准备语句会增加开销。

感谢准备技巧。我尝试了这段代码,但仍然得到相同的结果,因为它只填充数组的一行。注意我已将“$siteNAME.$Maindate.$I”更改为“$siteNAME.$Maindate.$id”,其中$id=uniqid().我的准备工作中可能还遗漏了什么?我会确认您的数据如预期的那样。还要检查数据库中的唯一密钥是否存在任何问题。您可以添加一些错误检查,以确保准备和执行成功,但如果对其中一个有效,则应该对所有数据都有效。哇,我很密集,我有MaintenanceID在Index.TY!上被索引为唯一!效果很好!感谢您的准备提示。我尝试了这段代码,但仍然得到相同的结果,因为它只会填充数组的一行。请注意,我已将“$siteNAME.$Maindate.$I”更改为“$siteNAME.$Maindate.$id”,其中$id=uniqid().我的准备工作中可能还遗漏了什么?我会确认您的数据如预期的那样。还要检查数据库中的唯一密钥是否存在任何问题。您可以添加一些错误检查,以确保准备和执行成功,但如果对其中一个有效,则应该对所有数据都有效。哇,我很密集,我有MaintenanceID索引为唯一,而不是在Index.TY!上!效果很好!