如何在PHP中使用mysqli_multi_查询逐个执行2个SQL查询

如何在PHP中使用mysqli_multi_查询逐个执行2个SQL查询,php,mysql,sql-insert,fgetcsv,mysqli-multi-query,Php,Mysql,Sql Insert,Fgetcsv,Mysqli Multi Query,我试图使用mysqli_multi_查询将值同时插入到MySQL数据库中,但如果显示警报消息说明记录插入失败,则不会执行并转到该部分 下面是我的带有查询的PHP代码 while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) { $sql_tableone = "INSERT into inverterlog (`id`,`timestamp`,`irradiance`,`ambienttemp`,`photovoltaicte

我试图使用mysqli_multi_查询将值同时插入到MySQL数据库中,但如果显示警报消息说明记录插入失败,则不会执行并转到该部分

下面是我的带有查询的PHP代码

while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) {
    $sql_tableone =  "INSERT into inverterlog (`id`,`timestamp`,`irradiance`,`ambienttemp`,`photovoltaictemp`,`pv1voltage`,`pv2voltage`,`pv3voltage`,`pv1current`,`pv2current`,`pv3current`,`pv1power`,`pv2power`,`pv3power`,`pv1energy`,`pv2energy`,`pv3energy`,`gridvoltagegv1`,`gridvoltagegv2`,`gridvoltagegv3`,`gridcurrentgc1`,`gridcurrentgc2`,`gridcurrentgc3`,`gridpowergp1`,`gridpowergp2`,`gridpowergp3`,`sumofapparentpower`,`gridpowertotal`,`gridenergyge1`,`gridenergyge2`,`gridenergyge3`,`socounter`,`gridcurrentdcgc1`,`gridcurrentdcgc2`,`gridcurrentdcgc3`,`gridresidualcurrent`,`gridfrequencymean`,`dcbusupper`,`dcbuslower`,`temppower`,`tempaux`,`tempctrl`,`temppower1`,`temppowerboost`,`apparentpowerap1`,`apparentpowerap2`,`apparentpowerap3`,`sovalue`,`reactivepowerrp1`,`reactivepowerrp2`,`reactivepowerrp3`,`opmode`,`latestevent`,`pla`,`reactivepowermode`,`overexcitedunderexcited`,`reactivepowerabs`,`inverter`)
                                                          values('','$newDate','$emapData[1]','$emapData[2]','$emapData[3]','$emapData[4]','$emapData[5]','$emapData[6]','$emapData[7]','$emapData[8]','$emapData[9]','$emapData[10]','$emapData[11]','$emapData[12]','$emapData[13]','$emapData[14]','$emapData[15]','$emapData[16]','$emapData[17]','$emapData[18]','$emapData[19]','$emapData[20]','$emapData[21]','$emapData[22]','$emapData[23]','$emapData[24]','$emapData[25]','$emapData[26]','$emapData[27]','$emapData[28]','$emapData[29]','$emapData[30]','$emapData[31]','$emapData[32]','$emapData[33]','$emapData[34]','$emapData[35]','$emapData[36]','$emapData[37]','$emapData[38]','$emapData[39]','$emapData[40]','$emapData[41]','$emapData[42]','$emapData[43]','$emapData[44]','$emapData[45]','$emapData[46]','$emapData[47]','$emapData[48]','$emapData[49]','$emapData[50]','$emapData[51]','$emapData[52]','$emapData[53]','$emapData[54]','$emapData[55]','$inverter')";
    $sql_tabletwo = "INSERT into data (`id`,`timestamp`,`gridpowertotal`,`inverter`) values ('','$newDate','$emapData[26]','$inverter')";
    $sql= $sql_tableone.";".$sql_tabletwo;
    $result = mysqli_multi_query( $con,$sql);
    if (! $result ) {
        echo "<script type=\"text/javascript\">
            alert(\"multi query Record Insertion Failed.\");
            </script>";
    }
    fclose($file);
}
//throws a message if data successfully imported to mysql database from excel file
echo "<script type=\"text/javascript\">
    alert(\"CSV File has been successfully Imported.\");
    window.location = \"four.php\"
/</script>";
//close of connection
mysqli_close($con); 
}
}
while($emapData=fgetcsv($file,10000,”)!==FALSE){
$sql\u tableone=“插入逆变器日志(`id`、`timestamp`、`IRADIANCE`、`ambienttemp`、`PHOTOVERTAICTEMP`、`PV1电压`、`PV3电压`、`PV1电流`、`PV2电流`、`PV1功率`、`PV2功率`、`PV3功率`、`PV1能量`、`PV2能量`、`PV3能量`、`GRIDVOLTAGVE1`、`GRIDVOLTAGVE2`、`GRIDAGVE3`、`CurrentGRIDGC1`、`CurrentGRIDGC2`、`GRIDPOWERGIP1`、`GRIDGP2`、`GRIDGP2`、`owergp3`、`sumofapparentpower`、`gridpowertotal`、`gridenergyge1`、`gridenergyge2`、`gridenergyge3`、`socounter`、`gridcurrentdcgc1`、`gridcurrentdcgc2`、`gridcurrentdcgc3`、`gridresidualcurrent`、`gridfrequencymean`、`dcbusupper`、`dcbuslower`、`temppower`、`temppower1`、`temppowerboost`、`Apap1`、`apparentpowerap2`、ApparentAP`3`、`sovalue`、`reactivepowerrp1`、`reactivepowerrp2`、`reactivepowerrp3`、`opmode`、`latestevent`、`pla`、`reactivepowermode`、`overexcited underexcited`、`reactivepowerabs`、`inverter`)
൪"",൪""""൪൪൪??新日期",34"新日期",34?新数据?"新数据数据数据[1[1,341൪"""数据[2,"数据[2???数据?数据3434$emapData[19]、“$emapData[20]、”$emapData[21]൪,"൪,34"൪൪൪34 343434343434 34343434 3434343434 3434343434 34343434 34343434 34343434343434?343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434,”,”,”,”数据数据数据[24,”,”,”“,”$emapData[41]”,“$emapData[42]”,“$emapData”[43]、“$emapData[44]、“$emapData[45]、”$emapData[46]、“$emapData[47]、“$emapData[48]、”$emapData[49]、“$emapData[50]、“$emapData[51]、“$emapData[52]、“$emapData[53]、”$emapData[54]、“$emapData[55]、“$inverter”);
$sql_tabletwo=“插入数据(`id`、`timestamp`、`gridpowertotal`、`inverter`)值(`newDate`、`emapData[26]、`inverter');
$sql=$sql_tableone.;“$sql_tabletwo;
$result=mysqli\u多重查询($con,$sql);
如果(!$result){
回声“
警报(\“多查询记录插入失败。\”;
";
}
fclose($文件);
}
//如果数据从excel文件成功导入mysql数据库,则抛出一条消息
回声“
警报(\“CSV文件已成功导入。\”;
window.location=\“four.php\”
/";
//关闭连接
mysqli_close($con);
}
}

如果表中的
id
列是自动递增的,则从查询中省略该列(以及空值)。或者,如果要在查询中提及该列,可以使用
NULL
(不带引号)

很多人都很难用自己的
mysqli\u multi\u query()
代码块找到错误,因为它没有设置为正确输出受影响的行和错误

我建议看一看通用代码块,它将有助于隔离麻烦的查询,以及

看起来您正在循环
mysqli\u multi\u query()
的两个查询。为了提高效率,我建议构建完整的查询数组,完成循环,然后只调用
mysqli\u multi\u query()

p、 您的insert值中是否有引号?准备好的语句将有助于解决此问题。请使用“我的链接”中的代码块并检查错误消息

更新:这是我填鸭式的回答(当然,我在发帖前并没有测试):

//我假设$newdate不是用户声明的并且被认为是安全的。
//我对自动递增的主键'id'使用NULL。
//如果您想确保每一对都有相同的'id',可以在第二次查询该对时使用LAST_INSERT_id()。
//建立变量以备将来使用
$inverterlog_sql=“插入到'inverterlog'中”(`id`、`timestamp`、`IRADIANCE`、`ambienttemp`、`PHOTOVERTAICTEMP`、`PV1电压`、`PV3电压`、`PV1电流`、`PV2电流`、`PV1功率`、`PV2功率`、`PV3功率`、`PV1能量`、`PV2能量`、`PV3能量`、`GRIDVOLTAGVE1`、`GRIDVOLTAGVE2`、`GRIDAGVE3`、`CurrentGRIDGC1`、`CurrentGRIDGC2`、`GRIDPOWERGIP1`、`GRIDGP2`、`GRIDGP2`、`owergp3`、`sumofapparentpower`、`gridpowertotal`、`gridenergyge1`、`gridenergyge2`、`gridenergyge3`、`socounter`、`gridcurrentdcgc1`、`gridcurrentdcgc2`、`gridcurrentdcgc3`、`gridresidualcurrent`、`gridfrequencymean`、`dcbusupper`、`dcbuslower`、`temppower`、`temppower1`、`temppowerboost`、`Apap1`、`apparentpowerap2`、ApparentAP`3`、`sovalue`、`reactivepowerrp1`、`reactivepowerrp2`、`reactivepowerrp3`、`opmode`、`latestevent`、`pla`、`reactivepowermode`、`overexcitedunderexcited`、`reactivepowerabs`、`inverter`)值(NULL、$newdate);
$data_sql=“插入到`data`(`id`、`timestamp`、`gridpowertotal`、`inverter`)值中(NULL、`newDate`);
$tally=0;
$x=0;
//生成所有查询
而($emapData=fgetcsv($file,10000,“,”)!==false){
++$x;
$sql[$x]=$inverterlog\u sql;//开始对的第一个查询

对于($i=1;$i了解防止SQL注入的准备语句使用
mysqli\u error()
打印错误message@jens...application用于一般用途…包括mysqli_error()…仍然没有显示任何内容…只是回显查询并在mysql中尝试console@Pradeep您可以告诉我。听取我关于插入的
id
列和值的建议。用我链接答案中的建议代码块替换您的查询代码块——它会告诉您是否/何时出现故障。如果您自己无法修复故障,请编辑您的查询代码块带错误m的stion
// I assume $newdate is not user declared and considered safe.
// I am using NULL for your auto-incremented primary key `id`.
// If you want to be assured that each pair has an identical `id`, perhaps use LAST_INSERT_ID() on second query of pair.

// establish variables for future use
$inverterlog_sql="INSERT INTO `inverterlog` (`id`,`timestamp`,`irradiance`,`ambienttemp`,`photovoltaictemp`,`pv1voltage`,`pv2voltage`,`pv3voltage`,`pv1current`,`pv2current`,`pv3current`,`pv1power`,`pv2power`,`pv3power`,`pv1energy`,`pv2energy`,`pv3energy`,`gridvoltagegv1`,`gridvoltagegv2`,`gridvoltagegv3`,`gridcurrentgc1`,`gridcurrentgc2`,`gridcurrentgc3`,`gridpowergp1`,`gridpowergp2`,`gridpowergp3`,`sumofapparentpower`,`gridpowertotal`,`gridenergyge1`,`gridenergyge2`,`gridenergyge3`,`socounter`,`gridcurrentdcgc1`,`gridcurrentdcgc2`,`gridcurrentdcgc3`,`gridresidualcurrent`,`gridfrequencymean`,`dcbusupper`,`dcbuslower`,`temppower`,`tempaux`,`tempctrl`,`temppower1`,`temppowerboost`,`apparentpowerap1`,`apparentpowerap2`,`apparentpowerap3`,`sovalue`,`reactivepowerrp1`,`reactivepowerrp2`,`reactivepowerrp3`,`opmode`,`latestevent`,`pla`,`reactivepowermode`,`overexcitedunderexcited`,`reactivepowerabs`,`inverter`) VALUES (NULL,$newdate";
$data_sql="INSERT INTO `data` (`id`,`timestamp`,`gridpowertotal`,`inverter`) VALUES (NULL,'$newDate'";
$tally=0;
$x=0;

// build all queries
while(($emapData=fgetcsv($file,10000,","))!==false){
    ++$x;
    $sql[$x]=$inverterlog_sql;  // start first query of pair
    for($i=1; $i<56; ++$i){
        $sql[$x].=",'".mysqli_real_escape_string($con,$emapData[$i])."'";
    }
    $sql[$x].=",'".mysqli_real_escape_string($con,$inverter)."');";  // end first query of pair
    $sql[$x].="$data_sql,'".mysqli_real_escape_string($con,$emapData[26])."','".mysqli_real_escape_string($con,$inverter)."')";  // whole second query of pair
    fclose($file);
}

// run all queries
if(mysqli_multi_query($con,implode(';',$sql)){
    do{
        $tally+=mysqli_affected_rows($con);
    } while(mysqli_more_results($con) && mysqli_next_result($con));
}

// assess the outcome
if($error_mess=mysqli_error($con)){
    echo "<script type=\"text/javascript\">alert(\"Syntax Error: $error_mess\");</script>";
}elseif($tally!=$x*2){  // I don't expect this to be true for your case
    echo "<script type=\"text/javascript\">alert(\"Logic Error: Only $tally row",($tally!=1?"s":"")," inserted\");</script>";
}else{
    echo "<script type=\"text/javascript\">alert(\"CSV File has been successfully Imported.\"); window.location = \"four.php\"/</script>";
}
mysqli_close($con);