Schon mal dran gedacht, hinter das "if (move_uploaded_file)" auch mal ein else zu machen, wo eine Fehlermeldung ausgegeben wird?
In der SELECT Abfrage würde ich um FILE auch noch die ``machen.
Die
prüfung des Dateinamens ist Mist.
Wenn das Ding schon existiert, würfelst Du einen neuen Namen aus und wirfst ihn dann weg, weil Du nicht in den else-Zweig kommst.
Dass man hinter mysql_query auch ein "or die (mysql_error());" schreiben kann, um Infos zu erhalten hast Du vielleicht auch schon mal gelesen.
Wo der Inhalt von $pfad herkommt wäre auch mal interessant...
Wenn ID ein autoincrement-Feld in der Tabelle ist, würde ich es beim INSERT weglassen und nicht mit '' beschreiben.
Die Endung mit explode() zu ermitteln kann ins Auge gehen, da der Dateinamen mehr als nur einen . enthalten kann.
Wie hast Du denn die Größe überhaupt auf 2GB erhöht?
Hast Du einfach eine größere Datei genommen? Oder hast Du die Größe der maximal hochzuladenden Datei in der Konfiguration verändert?