PHP ile MySQL tabloya sekme ile sınırlandırılmış metin dosyasını okuyun

3 Cevap php

Ben mevcut MySQL tabloları içine sekme ayrılmış metin dosyaları bir dizi okumak için çalışıyorum. Ben kodu oldukça basittir:

$lines = file("import/file_to_import.txt");

foreach ($lines as $line_num => $line) {
    if($line_num > 1) {
        $arr = explode("\t", $line);
        $sql = sprintf("INSERT INTO my_table VALUES('%s', '%s', '%s', %s, %s);", trim((string)$arr[0]), trim((string)$arr[1]), trim((string)$arr[2]), trim((string)$arr[3]), trim((string)$arr[4]));
        mysql_query($sql, $database) or die(mysql_error());
    }
}

Yakınındaki kullanılacak doğru sözdizimi için MySQL sunucu sürümü karşılık kılavuzunu kontrol''; Ama ne olursa olsun ben ne (dolayısıyla sprintf açıklamada her değişkenin önce döküm) I "Kendi SQL sözdizimi bir hata var olsun line 1 "hatası.

Ben, kod echo MySQL editörü yapıştırın ve iyi çalışır, sadece PHP script çalıştırmak olmaz.

Ben yanlış ne yapıyorum?

Si

GÜNCELLEME: İşte echoe'd SQL şöyledir:

INSERT INTO wheelbase (WheelBaseCode, LanguageCode, WheelBaseDescription) VALUES ('A1', 'GBEN', '2.50-2.99m')
INSERT INTO wheelbase (WheelBaseCode, LanguageCode, WheelBaseDescription) VALUES ('A2', 'GBEN', '3.00-3.49m')
INSERT INTO wheelbase (WheelBaseCode, LanguageCode, WheelBaseDescription) VALUES ('A3', 'GBEN', '3.50-3.99m')
INSERT INTO wheelbase (WheelBaseCode, LanguageCode, WheelBaseDescription) VALUES ('A4', 'GBEN', '4.00-4.49m')

İlginçtir, ben şimdi tablodaki satır sayısını doğru oluştururken var, ama ekler değerler boş ...

Bu kaynak metin dosyasındaki bir kodlama sorunu olabilir?

3 Cevap

Sen dize döküm gerekmez, veriler zaten dizeleri olacaktır.

Emin dosya verilerinde hiçbir tırnak vardır olun. Tabii ki yanlış bir şey olup olmadığını görmek için çalıştırmadan önce sql dize echo.

SQL değiştirin:

"INSERT INTO my_table (`field1Name`, `field2Name`, `field3Name`, `field4Name`, `field5Name`) VALUES('%s', '%s', '%s', '%s', '%s');"

Bu değişiklik alan adlarını, ve son iki değerleri alıntı içerir.

I dont like you method in general. Maybe you fix your "first" problem with the missing rows. Whats about some special character like '" backslash or SQL injection? I think you should use prepared statements which PDO provides and call the "bindValue" of the statement. It is a stable and buildin PHP lib. Or you can use dbTube.org instead which is a graphical import tool.

Tebrik

Panjur

Dan PHP.net:

<?php
    fputcsv($fp, $foo, "\t");
?>

Sadece tek tırnak o ne öylesine \t t olarak aynı olacağını çıkacak bulunuyor oraya koymak ne anlam ... değişmez olduğunu unuttum, çünkü \ olmasıdır durum sadece kaçmak için kullanılan olurdu ama çift tırnak kullanırsanız o işe.