2012-01-16 60 views
-1

我使用这些将CSV内容导入MySQL数据库的代码。导入到MySQL的CSV字段验证

<?php 
    $databasehost = "localhost"; 
    $databasename = "test"; 
    $databasetable = "sample"; 
    $databaseusername ="test"; 
    $databasepassword = ""; 
    $fieldseparator = ","; 
    $lineseparator = "\n"; 
    $csvfile = "filename.csv"; 
    $addauto = 0; 
    $save = 1; 
    $outputfile = "output.sql"; 


    if(!file_exists($csvfile)) { 
    echo "File not found. Make sure you specified the correct path.\n"; 
    exit; 
    } 

    $file = fopen($csvfile,"r"); 

    if(!$file) { 
    echo "Error opening data file.\n"; 
    exit; 
    } 

    $size = filesize($csvfile); 

    if(!$size) { 
    echo "File is empty.\n"; 
    exit; 
    } 

    $csvcontent = fread($file,$size); 

    fclose($file); 

    $con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error()); 
    @mysql_select_db($databasename) or die(mysql_error()); 

    $lines = 0; 
    $queries = ""; 
    $linearray = array(); 

    foreach(split($lineseparator,$csvcontent) as $line) { 

    $lines++; 

    $line = trim($line," \t"); 

    $line = str_replace("\r","",$line); 

    $line = str_replace("'","\'",$line); 

    $linearray = explode($fieldseparator,$line); 

    $linemysql = implode("','",$linearray); 

    if($addauto) 
      $query = "insert into $databasetable values('','$linemysql');"; 
    else 
    $query = "insert into $databasetable values('$linemysql');"; 

    $queries .= $query . "\n"; 

    @mysql_query($query); 
    } 

    @mysql_close($con); 

    if($save) { 

    if(!is_writable($outputfile)) { 
    echo "File is not writable, check permissions.\n"; 
    } 

else { 
    $file2 = fopen($outputfile,"w"); 

    if(!$file2) { 
     echo "Error writing to the output file.\n"; 
    } 
    else { 
     fwrite($file2,$queries); 
     fclose($file2); 
    } 
    } 

    } 

    echo "Found a total of $lines records in this csv file.\n"; 
?> 

但我希望对csv文件中的某些字段进行验证。
例如,第二个字段是电子邮件,我希望检查字符串是否包含“@”。
我可以知道如何/在哪里添加代码以进行此类验证?

在此先感谢!

+0

你确定你不知道在哪里添加这些验证? – 2012-01-16 05:02:16

+1

Exactyl为什么你要做自己的csv解析阅读? PHP有'fgetcsv()'它可以为你读/分裂 – 2012-01-16 05:04:49

+0

我只是一个初学者,在编程和php。 – Lloydworth 2012-01-16 05:23:53

回答

0

你可以使用正则表达式:

$lines++; 
$line = trim($line," \t"); 
$line = str_replace("\r","",$line); 
$line = str_replace("'","\'",$line); 
$linearray = explode($fieldseparator,$line); 
//add code for checking email string 
if (preg_match("/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/", $linearray[1]) === 0) { 
//not a email string 
    conitnue; 
} 
$linemysql = implode("','",$linearray); 
+0

preg_match(“/ \ w +([ - +。] \ w +)@ \ w +([ - 。] \ w +)。\ w +([ - 。] \ w +)* /”是检查其电子邮件? – Lloydworth 2012-01-16 05:36:59

0

使用内置功能fgetcsv()filter_var()和MySQL功能LOAD DATA

$handle = fopen("test.csv", "r"); 
$continue = true; 
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE && $continue) { 
    // check for valid email (presuming it's in column 1) 
    $continue = filter_var($data[0], FILTER_VALIDATE_EMAIL); 
} 
fclose($handle); 

if($continue){ 
    // using LOAD DATA will be a lot quicker than individual queries! 
    $query = "LOAD DATA INFILE '/full/path/to/test.csv'"; 
}