Pytanie w sprawie php, csv, mysql – Najlepszy sposób na złapanie błędu LOAD DATA LOCAL INFILE?

6

Jestem nowicjuszem MySQL kończącym fragment kodu centralnego dla mojej aplikacji internetowej. Kod importuje plik CSV (lokalnie), który jest generowany i czyszczony przez FileMaker i pozostawia go.

Biorąc pod uwagę, że wkrótce dojdzie do produkcji (i prawdopodobnie będzie to baza danych poniżej 500 MB), chciałbym wiedzieć, czy istnieje jakaś lepsza kontrola błędów / łapania błędów, którą mógłbym zrobić, aby zapobiec problemom na drodze lub zostać powiadomionym o moja konfiguracja serwera. Przeczytałem rzeczy o logach tymczasowych itp., A moja administracja MySQL nie jest jeszcze gotowa do wymazania.

Bardzo podstawowy kod to:

$m = mysql_connect('localhost', 'mytable', 'mypassword');
$db = 'mydb';
mysql_select_db($db) or die("Import Error - Couldn't select database: " . mysql_error());

$sql = 'load data local infile "inventory.csv"
        into table ibl_account_details_temp fields terminated by ","
        optionally enclosed by "\""
        lines terminated by "\r"
        (store_id, SKU, account, item_number, brand, description, size, category, price, qty, fees)
        ';

echo mysql_query($sql) or die(myqsl_error());

PS EDIT: Chciałbym również wiedzieć, czy ta metoda importu jest otwarta na wstrzykiwanie SQL?

Nie widzę, w jaki sposób wystąpiłoby ryzyko wstrzyknięcia SQL pierwszego rzędu przez wykonanieLOAD DATA INFILE, ponieważ MySQL nie wykonuje zawartości pliku CSV, po prostu analizuje go jako CSV. Oczywiście nic nie mówi o ryzyku ataku drugiego rzędu, ale tak długo, jak każde zapytanie, które pobiera dane wejściowe (w tym dane wejściowe z wyniku zapytania) wykorzystuje parametryzację, powinno być bezpieczne. Z tego powodu (między innymi) powinieneś użyć mysqli lub PDO, aby uzyskać dostęp do mysql zamiast funkcji mysql_ *. John Carter
Użyłem wcześniej prostej instrukcji insert i fgetcsv wychodził z pamięci w moim pliku 18 MB. Nie mogłem go rozwiązać i jestem maksymalnie obsługiwany przez hosta przy 128 MB pamięci RAM i muszę to utrzymać. To powiedziawszy, każde inne miejsce, w którym używam PDO ;-) SWL
O tak, nie mam nic przeciwko używaniuLOAD DATA INFILE aby zaimportować CSV, po to jest. John Carter

Twoja odpowiedź

1   odpowiedź
4

aba. Używam go prawie codziennie i stało się prostym procesem importowanie do pewnego rodzaju tymczasowego stołu i używanie kombinacji PHP i MySQL do sprawdzania, co zostało zaimportowane. Można argumentować, że jest to dodatkowa praca, ale ma tę zaletę, że daje mi pełną kontrolę nad tym, czym jest „błąd”. Mówiąc najprościej, używam go, aby jak najskuteczniej uzyskać surowe dane, a następnie zbudować reguły sprawdzania błędów i sprawdzania poprawności w skrypcie php.

Nie wiem, skąd pochodzą twoje dane, więc nie mogę na pewno powiedzieć, ale zazwyczaj jest to problem z wprowadzaniem danych przez użytkownika, więc prawdopodobnie nie. Następnie powraca do szorowania, które wykonujesz w FileMaker, jak bezpieczny jest gotowy produkt. GDP
Dziękuję za szybką odpowiedź. Moje sprawdzanie błędów jest w FileMaker i jest dość surowe, więc czuję się tam bezpiecznie. Czy istnieje możliwość iniekcji SQL na tej trasie? SWL

Powiązane pytania