Well, problems like these really do need more info and it's generally best to put a piece of problem source code with it so people can see where the problem may be.
And dial-up?
That really threw me, guess you're running this from a local machine at home...
But, the thing is, the data should already be local to the machine when the query execs.
If that's not how you've set it up, do so.
Now on the actual database insertion,
you can try a couple things here.
First, do a lock tables. This generally speeds up a large insert by locking the table from all other processes causing the database to free itself from thinking it will have to keep track of the key indeces.
You can lock like so:
$stmt = "LOCK TABLES myTable WRITE";
..set up connection here...
mysql_query($stmt);
...do your inserts...
$stmt = "UNLOCK TABLES";
mysql_query($stmt);
Normally, I would have the script take all large database inserts and dump each one as a single tab or comma seperated value list and do a LOAD DATA INFILE since that will execute much quicker than by having php make a thousand insert requests.
But... you are inserting blobs, and that is something I haven't dealt with yet for the LOAD DATA INFILE feature, since usually when I get images, it's usually 1 at a time from a user posting a profile, so no need to do the LOAD DATA routine.
What worries me is that binary data can have any number of special characters, though I believe a tab or space would be unlikely.
So you might want to give it a shot here and see what happens.
If you don't have a MySQL manual, you can go read up at www.mysql.org, they have some other pointers on speeding up inserts as well.
If you'd like to try to load data from file,
you set up a txt file with tabs between each field dataset and have each row terminated by a new line, save the file
and then write out your insert statement like so:
$stmt = "LOAD DATA INFILE myFile INTO myTable (field1,field2,...)";
mysql_query($stmt);