0
私はPHPでcsvをループし、データでmysqlデータベースを更新しています。コードを実行すると、同じデータが800回挿入され、次のレコードに移動します。 2番目のレコードに達すると、それは想定されているように各行をDBの行として挿入するように見えます。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