![](/img/trans.png)
[英]MYSQL inserting multiple rows from table from one user to other users in a multiple loops is inserting only last result
[英]csv file is inserting a blank row in the last of other rows into mysql table
當我將記錄從csv文件插入mysql表時,它還會在其他記錄的最后一行插入空白行。
這是我的代碼:
<?php
$connect = mysql_connect('localhost','root','root');
if (!$connect) {
die('Could not connect to MySQL: ' . mysql_error());
}
$cid =mysql_select_db('bizin490_devcredit',$connect);
define('CSV_PATH', '/home/ubc/Documents/');
$csv_file = CSV_PATH . "test.csv";
$csvfile = fopen($csv_file, 'r');
$theData = fgetcsv($csvfile);
$i = 0;
while (!feof($csvfile)) {
$csv_data[] = fgets($csvfile, 1024);
$csv_array = explode(",", $csv_data[$i]);
$insert_csv = array();
$insert_csv['name'] = $csv_array[0];
$insert_csv['email'] = $csv_array[1];
$query = mysql_query("select name from test where name='" . $insert_csv['name'] . "'");
$count = mysql_num_rows($query);
if ($count == 0) {
$query = "INSERT INTO test(name,email)VALUES('" . $insert_csv['name'] . "','" . $insert_csv['email'] ."')";
$n = mysql_query($query, $connect);
} else {
$sql = "update test set email='".$insert_csv['email']."'";
$qu = mysql_query($sql);
}
$i++;
}
fclose($csvfile);
echo "File data successfully imported to database!!";
mysql_close($connect);
?>
效率不高,但增加了條件
if ($insert_csv['name'] !== '' && $insert_csv['email']!=='') //since != '' will return true if you pass is numeric 0 and a few other cases, hence using !==
{
$query = mysql_query("select name from test where name='" . $insert_csv['name'] . "'");
$count = mysql_num_rows($query);
if ($count == 0) {
$query = "INSERT INTO test(name,email)VALUES('" . $insert_csv['name'] . "','" . $insert_csv['email'] ."')";
$n = mysql_query($query, $connect);
} else {
$sql = "update test set email='".$insert_csv['email']."'";
$qu = mysql_query($sql);
}
}
使用SplFileObject,您可以告訴它忽略空行,並自動將文件作為CSV文件處理
$file = new SplFileObject($csv_file);
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
foreach ($file as $csv_array) {
...
}
此代碼中可能存在缺陷:
$csvfile = fopen($csv_file, 'r'); // opens the file
$theData = fgetcsv($csvfile); // reads first line
$i = 0;
while (!feof($csvfile)) { // checks for eof
$csv_data[] = fgets($csvfile, 1024); // reads next line
feof
為false
。 fgets
不檢查最后一個\\n
后面是否有數據,因此feof
為假。 然后fgets
讀取“空”行,直到eof
被錯誤地添加。 更改:
// checks for eof and errors
while ( ($csv_data[] = fgets($csvfile, 1024)) !== false) {
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.