Mysql将多个插入语句转换为一个

我有一个脚本来上传一个excel文件,并从xlsx文件插入数据到一个MySQL表。 就是这样

<?php require_once('Connections/met.php'); $file = './uploads/windrose_data.xlsx'; if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $file)) { $msg="File upload successful"; $db=mysql_select_db($database_met,$met); set_include_path(get_include_path() . PATH_SEPARATOR . 'Classes/'); include 'PHPExcel/IOFactory.php'; // This is the file path to be uploaded. $inputFileName = $file; try { $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); } catch(Exception $e) { die('Error loading file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage()); } $allDataInSheet = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true); $arrayCount = count($allDataInSheet); // Here get total count of row in that Excel sheet for($i=2;$i<=$arrayCount;$i++){ $date = trim($allDataInSheet[$i]["A"]); $time = trim($allDataInSheet[$i]["B"]); $dir = trim($allDataInSheet[$i]["C"]); $spd = trim($allDataInSheet[$i]["D"]); $insertTable= mysql_query("insert into wr_copy (date,time,dir,spd) values('$date', '$time',$dir,$spd)") or die(mysql_error()); $msg=$i-1." records inserted into the table"; } echo $msg; } else { echo "Upload Failed"; } ?> 

这里为excel中的每一行执行一条插入语句,然后我使用迭代variables发送一个响应作为插入的logging数。 有两个问题,一个,我想使用一个插入语句,可以用于插入所有行在Excel中。 第二个问题是使用迭代variables值为no。 的logging可能是一个问题,因为如果数据中有任何错误,查询可能不会执行。 有人可以提出一个解决这个问题吗?

为了创build一个声明:

 $statement = 'insert into wr_copy (date,time,dir,spd) values'; $values = []; for($i=2;$i<=$arrayCount;$i++){ $date = trim($allDataInSheet[$i]["A"]); $time = trim($allDataInSheet[$i]["B"]); $dir = trim($allDataInSheet[$i]["C"]); $spd = trim($allDataInSheet[$i]["D"]); $values[] = "('$date', '$time',$dir,$spd)"; } $statement .= implode(',',$values); 

为了得到插入的logging的实际数量(我从这里复制的例子,并改变它):

 $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } /* prepare statement */ if ($stmt = $mysqli->prepare($statement)) { /* execute statement */ $stmt->execute(); printf("rows inserted: %d\n", $stmt->affected_rows); /* close statement */ $stmt->close(); } /* close connection */ $mysqli->close(); ?>