1

好的,所以我有一个 php 脚本来将数据插入到 mysql 表中,它看起来像这样:

<?php
$connect = mysql_connect('localhost','my_username','my_pass');
if (!$connect) {die('Could not connect to MySQL: ' . mysql_error());}
$cid =mysql_select_db('geolocation',$connect);
// supply your database name
define('CSV_PATH','/var/www/geolocation/');
// path where your CSV file is located
$csv_file = CSV_PATH . "new_Location.csv"; // Name of your CSV file
$csvfile = fopen($csv_file, 'r');
$theData = fgets($csvfile);
$i = 0;
$k = 0;
while (!feof($csvfile)) {
   $csv_data[] = fgets($csvfile, 1024);
   $csv_array = explode(",", $csv_data[$i]);
   $insert_csv = array();
   if(isset($csv_array[0]) && isset($csv_array[1]) &&  isset($csv_array[2]) &&  isset($csv_array[3]) &&  isset($csv_array[4]) &&  isset($csv_array[5]) &&  isset($csv_array[6]) &&  isset($csv_array[7]) &&  isset($csv_array[8])){
     $insert_csv['ID'] = $csv_array[0];
     $insert_csv['country'] = $csv_array[1];
     $insert_csv['region'] = $csv_array[2];
     $insert_csv['city'] = $csv_array[3];
     $insert_csv['postalCode'] = $csv_array[4];
     $insert_csv['latitude'] = $csv_array[5];
     $insert_csv['longitude'] = $csv_array[6];
     $insert_csv['other'] = $csv_array[7];
     $insert_csv['another'] = $csv_array[8];
     $query = "INSERT INTO City (locId, country, region, city, postalCode, latitude, longitude) VALUES('".$insert_csv['ID']."','".$insert_csv['country']."','".$insert_csv['region']."','".          $insert_csv['city']."','".$insert_csv['postalCode']."','".$insert_csv['latitude'].",,'".$in sert_csv['longitude']."'')";
  $n=mysql_query($query, $connect );
   $i++;
   }
   if($k==1000){
    echo $i . " \n";
    $k = 0;
   }
   $k++;
}
fclose($csvfile);
echo "File data successfully imported to database!!";
mysql_close($connect);
?>

现在,当我运行脚本时,一切似乎都正常工作,我echo $i每隔一段时间就会得到一次,最终脚本以没有错误或任何内容结束,但是当我查看我的 mysql(通过 phpmyadmin)时,我没有看到任何添加到的行表......我过去也使用过这个脚本的另一个修改版本,它工作得很好(除了慢),但是当谈到 mysql 时我仍然很绿色,似乎无法弄清楚发生了什么关于...这是我的表格格式

 locId --> int(11)
 country --> varchar(2)
 region --> varchar(2)
 city --> varchar(50)
 postalCode --> varchar(8)
 latitude --> varchar(10)
 longitude --> varchar(10)

以及来自 csv 文件的示例:

 46,CK,NA,NA,NA,-21.2333,-159.7667,NA,NA

任何有关为什么这不起作用的帮助,甚至我如何进行调试,将不胜感激!

还要注意(我不希望在我的表中的 csv 中有最后一个值)所以这些是故意从插入语句中省略的

4

1 回答 1

2

我做这样的事情:

$file = fopen("$link_file","r")or die("file dont exist");
while (!feof($file )){
$campo = fgetcsv($file,4096,",");

$loadsql = "INSERT INTO temporal_table(id,state,etc) VALUES ('$campo[0]','$campo[1]','etc');";
mysql_query($loadsql) or die(mysql_error());

}
fclose($file );

我没有看到你使用fgetcsv功能。并且,您是否尝试在此期间回显数据?使用这样的东西:

echo $i." line query ".$query." <br>";

编辑

尝试这个:

$csv_file = CSV_PATH . "new_Location.csv"; 
$file = fopen("$csv_file","r")or die("file error");
while (!feof($file)){

$insert_csv = fgetcsv($file,4096,",");
$query = "INSERT INTO City (
               locId, 
               country, 
               region, 
               city, 
               postalCode, 
               latitude, 
               longitude                //removed all the simple quotes..
           ) VALUES (
               '$insert_csv[0]',
               '$insert_csv[1]',
               '$insert_csv[2]',
               '$insert_csv[3]',
               '$insert_csv[4]',
               '$insert_csv[5]',
               '$insert_csv[6]'
           )";
    mysql_query($query) or die(mysql_error());
    }
    fclose($csvfile);
于 2013-06-09T03:56:15.023 回答