使用php将excel中的多行数据导入到mysql

我试图导入Excel到不同的数据types,包括一个date时间列的MySQL表,但代码只似乎selectExcel数据的第一行,date显示为:0000-00-00。 如果重复trade_number($ emapData [2]),我又如何确保文件不上载,因为这是我的数据库表中的主键? 请帮助我解决这个问题。

我的HTML是这样的:

<form enctype="multipart/form-data" method="post" role="form"> <div class="form-content"> <h1>Traded Securities Data Upload</h1> <div><label for="exampleInputFile">File Upload: </label><br><input type="file" name="file" id="file"><p style="font-size: .8em; color: rgb(51,0,255);">Only Excel/CSV File to be uploaded.</p></div> <div><button type="submit" id="Import" class="btn btn-default" name="Import" value="Import">Upload</button></div> </div><!--end of form content div--><br class="clear-fix"> </form> 

而我的PHP代码块是

  <?php if(isset($_POST["Import"])){ // Connnection string to the database mysql_select_db($database_connect, $connect); echo $filename=$_FILES["file"]["tmp_name"]; if($_FILES["file"]["size"] > 0){ $file = fopen($filename, "r"); $count = 0; // add this line while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE){ //print_r($emapData); //exit(); $count++;// add this line if($count>1){// add this line $sql = mysql_query("INSERT into trades_data(symbol,trade_date,trade_number,buy_order_date,buy_order_number,sell_order_date,sell_order_number,sell_account,buy_account,buy_firm,sell_firm,buy_firm_name,sell_firm_name,entry_time,price,quantity,settle_date,trade_value,settlement_value,updated) values ('$emapData[0]','$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]',now())") or die (mysql_error()); mysql_query($sql); } // if count closed // add this line } //while loop closed fclose($file); echo 'CSV File has been successfully Imported'; header('Location: ../edit_pages.php'); } else{ echo 'Invalid File:Please Upload CSV File';} } // close first if ?> 

  1. 使用PDO或mysqli并准备查询。 这不仅会针对SQL注入攻击或其他错误(如其中有撇号的单元格),而且您的插入在循环中会更快。

  2. 确保您插入的date是Mysql预期的格式,最安全的是YYYY-MM-DD。 或者更新电子表格以使用该格式,或者在使用PHP的DateTime类及其format()方法导入date值时转换date值

 <form enctype="multipart/form-data" method="post" role="form"> <div class="form-group"> <label for="exampleInputFile">File Upload</label> <input type="file" name="file" id="file" size="150"> <p class="help-block"> Only Excel/CSV File Import. </p> </div> <button type="submit" class="btn btn-default" name="Import" value="Import">Upload</button> </form> 

和我的PHP代码一样,我使用了PHP函数fgetcsv()

 <?php if(isset($_POST["Import"])) { //First we need to make a connection with the database $host='localhost'; // Host Name. $db_user= 'root'; //User Name $db_password= ''; $db= 'product_record'; // Database Name. $conn=mysql_connect($host,$db_user,$db_password) or die (mysql_error()); mysql_select_db($db) or die (mysql_error()); echo $filename=$_FILES["file"]["tmp_name"]; if($_FILES["file"]["size"] > 0) { $file = fopen($filename, "r"); //$sql_data = "SELECT * FROM prod_list_1 "; while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) { //print_r($emapData); //exit(); $sql = "INSERT into prod_list_1(p_bench,p_name,p_price,p_reason) values ('$emapData[0]','$emapData[1]','$emapData[2]','$emapData[3]')"; mysql_query($sql); } fclose($file); echo 'CSV File has been successfully Imported'; header('Location: index.php'); } else echo 'Invalid File:Please Upload CSV File'; } ?>