首先,您需要閱讀并丟棄CSV中的標(biāo)題行。然后,使用適當(dāng)?shù)摹?zhǔn)備好的和參數(shù)化的查詢,您可以正確地更新數(shù)據(jù)庫。由于.csv文件中的日期格式正確,因此不需要進(jìn)行任何操作,但是對于其他CSV文件可能不是這種情況,通常需要在將日期正確存儲到表中之前對其進(jìn)行重新格式化。
<?php //index.php $connect = mysqli_connect("localhost", "root", "1234", "ml_database"); $message = ''; if(isset($_POST["upload"])) { if($_FILES['product_file']['name']) { $filename = explode(".", $_FILES['product_file']['name']); if(end($filename) == "csv") { $handle = fopen($_FILES['product_file']['tmp_name'], "r"); // 讀取并忽略標(biāo)題行 $data = fgetcsv($handle, 1000, ","); // 準(zhǔn)備查詢一次 $query = "UPDATE my_table SET date = ?, births = ? WHERE data_id = ?"; $stmt = $connect->prepare($query); // 循環(huán)遍歷csv剩余的行 while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $stmt->bind_param('sss', $data[0],$data[1],$data[2]); $stmt->execute(); } fclose($handle); header("location: index.php?updation=1"); exit; // 重定向后一定要使用exit } else { $message = ''; } } else { $message = ''; } }
注意:我假設(shè)所有3列都是文本類型的。
$stmt->bind_param('sss', $data[0],$data[1],$data[2]); ^^^
如果date_id
是整數(shù)類型,您可以將其更改為'ssi'
,盡管3個s
通常也能正常工作。
參考資料: