0
我通過PHP中的CSV循環和更新與數據的MySQL數據庫。在運行我的代碼時,它會將相同的數據插入800次,然後移至下一條記錄。一旦達到第二條記錄,它似乎將每行作爲行中的一行插入到數據塊中。在PHP循環通過CSV - 插入和更新
難道我在循環(可能是一個無限循環),MySQL的可能只是修正有一個錯誤?
$link = mysql_connect('localhost', 'user', 'pass');
if (!$link) {
die('Not connected : ' . mysql_error());
}
// make foo the current db
$db_selected = mysql_select_db('parsetest', $link);
if (!$db_selected) {
die ('Can\'t use parsetest : ' . mysql_error());
}
function csv_to_array($filename='', $delimiter=',')
{
if(!file_exists($filename) || !is_readable($filename))
return FALSE;
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE)
{
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
{
if(!$header)
$header = $row;
else
$data[] = array_combine($header, $row);
}
fclose($handle);
}
return $data;
}
$data = csv_to_array('stockimp.csv');
foreach ($data as $key) {
$style = $key['Style'];
$result = mysql_query("SELECT * FROM stocklink2 WHERE Style = '$style'");
if($result === FALSE) {
die(mysql_error()); // TODO: better error handling
}
if(mysql_num_rows($result) > 0) {
$result = mysql_query("UPDATE stocklink2 SET Style = '$style' ");
if (!$result) {
die('Invalid query on update: ' . mysql_error());
}
else {
echo $key['Style']." Updated <br>";
}
}
else
{
$result = mysql_query("INSERT INTO stocklink2 (Style) VALUES ('$style') ");
if (!$result) {
die('Invalid query on insert: ' . mysql_error());
}
else {
echo $key['Style']." Inserted <br>";
}
}
}
更新:
原來的問題得到解決。該表沒有將任何列設置爲唯一,一旦我將表的第一列更改爲「唯一」順序插入的記錄。
循環的更新部分現在無法複製進入「2」。
這應該很容易調試。嘗試使用'echo'或'print_r'(如果需要的話,後面跟一個'exit')來更多地瞭解你的循環中發生了什麼。 – Dave
嘗試打印來自此函數的響應$ data = csv_to_array('stockimp.csv');查看數據是否正確。 –
請檢查mysqli並準備好語句。運行這些查詢時,它們會爲您提供巨大的性能提升。 – Celoain