Frage an csv, php, mysql – Beste Weg, um Fehler zu fangen LOAD DATA LOCAL INFILE?

6

Ich bin ein MySQL-Neuling, der einen Teil des Codes für meine Webanwendung fertigstellt. Der Code importiert eine CSV-Datei (lokal), die von FileMaker generiert und bereinigt wird, und belässt diese.

Da dies bald in Produktion gehen wird (und wahrscheinlich eine Datenbank unter 500 MB sein wird), würde ich gerne wissen, ob es eine bessere Fehlerüberprüfung / -erkennung gibt, die ich tun könnte, um möglicherweise Probleme auf der Straße zu verhindern oder gewarnt zu werden mein Server-Setup. Ich habe Dinge über temporäre Protokolle usw. gelesen und meine MySQL-Administration ist noch nicht auf dem neuesten Stand.

Der grundlegende Code lautet:

$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: Ich würde auch gerne wissen, ob diese Importmethode für SQL Injection offen ist?

Ich kann nicht sehen, wie das Risiko einer SQL-Injection erster Ordnung bei der Ausführung bestehen würdeLOAD DATA INFILEDa MySQL den Inhalt der CSV-Datei nicht ausführt, wird sie nur als CSV analysiert. Das sagt natürlich nichts über das Risiko eines Angriffs zweiter Ordnung aus, aber solange jede Abfrage, die Eingaben (einschließlich Eingaben aus einem Abfrageergebnis) verwendet, Parametrisierung verwendet, sollten Sie sicher sein. Aus diesem Grund sollten Sie (unter anderem) mysqli oder PDO verwenden, um auf mysql anstelle der mysql_ * -Funktionen zuzugreifen. John Carter
Ich habe zuvor eine einfache insert-Anweisung verwendet und fgetcsv hat nicht mehr genügend Speicher für meine 18-MB-Datei. Ich konnte es nicht lösen und bin vom Host auf 128 MB RAM ausgelastet und muss dafür sorgen, dass dies funktioniert. Das heißt, an jedem anderen Ort verwende ich PDO ;-) SWL
Oh sicher, ich habe nichts dagegenLOAD DATA INFILE CSV zu importieren, das ist, was es ist. John Carter

Deine Antwort

1   die antwort
4

benutze es fast jeden Tag und es ist zu einer einfachen Routine geworden, es in eine temporäre Tabelle zu importieren und eine Kombination aus PHP und MySQL zu verwenden, um zu validieren, was importiert wurde. Man kann argumentieren, dass dies zusätzliche Arbeit ist, aber es hat den Vorteil, dass ich die volle Kontrolle darüber habe, was ein "Fehler" ist. Einfach ausgedrückt, verwende ich es, um die Rohdaten so effizient wie möglich zu platzieren, und erst dann baue ich meine Regeln für die Fehlerprüfung und -validierung in einem PHP-Skript auf.

Danke für die schnelle Antwort. Meine Fehlerprüfung erfolgt in FileMaker und ist ziemlich streng, sodass ich mich dort sicher fühle. Gibt es eine Möglichkeit einer SQL-Injection auf dieser Route? SWL
Ich weiß nicht, woher Ihre Daten stammen, kann also nicht genau sagen, aber das ist normalerweise ein Problem bei der Benutzereingabe, also vermutlich nicht. Anschließend wird in FileMaker überprüft, wie sicher das fertige Produkt ist. GDP

Verwandte Fragen