因此,我非常高興地使用Load Data infile將數據上載到數據庫中的多個表。我的問題是上傳的數據包含格式不正確的數據,例如d/m/Y的日期而不是Y-m-d。通過PHP上載到MYSQL並通過Load Data InFile驗證數據通過PHP
這並不妨礙數據被插入,它只是將它作爲0000-00-00插入。我所希望的是它失敗了,所以我可以通知用戶在繼續之前修複數據。
我目前在做一個檢查,以確保上傳使用以下的小功能比較它針對樣本文件包含正確的列文件:
function check_csv($f_a, $f_b)
{
$csv_upload = array_map("str_getcsv", file($f_a,FILE_SKIP_EMPTY_LINES))[0];
$csv_sample = array_map("str_getcsv", file($f_b,FILE_SKIP_EMPTY_LINES))[0];
$match = 'true';
foreach ($csv_sample as $key => $value) {
if($value != $csv_upload[$key]){
$match = 'false';
break 1;
}
}
return $match;
}
...我終於明白,是和array_diff()在這裏可能有用的功能,我將在稍後探討。
回到現在的問題,我是否需要在此函數中執行一些操作來檢查每個值,或者是否有Load Data Infile選項可以強制執行我期望的操作。
謝謝你,這幾乎是我以爲我會得到。 關於我的功能,它只是有意識地檢查第一行,因爲我只是想檢查文件是否包含預期的列,並且按照預期的順序。 由於數據來自相對受控的源,我真的只關心驗證第2行(或列頭後的第一行數據)的數據,所以我會把你的日期檢查片段用於良好的使用。 再次感謝 –
此外,我的腳本是一個通用腳本,可處理具有不同列號和名稱的不同數據文件。因此我將其與文件的已知良好示例副本進行比較。 –
沒關係。您可以讀取所需樣本文件的標題,然後將每行的列數與樣本文件中的列數進行比較。無論如何,你將不得不檢查每一行的日期。你所說的沒有改變我提供的答案。 – Sherif