proverei richiamando la funzione mysql_insert_id() subito dopo la query:

Codice PHP:
function singleUpload($i$recordID$cartella$maxSize$acceptType) {
    if (
$_FILES['file']['name'][$i] != "") {
        
$destinazione $cartella $recordID "_" $_POST['category'] . "." file_extension(basename($_FILES['file']['name'][$i]));
        if (
$_FILES['file']['size'][$i] <= $maxSize 1024) {// da levare appena il resto funziona
            
if (in_array($_FILES['file']['type'][$i], $acceptType)) {
                if (
move_uploaded_file($_FILES['file']['tmp_name'][$i], $destinazione)) {
                    return 
"File caricato con successo!";
                } else {
                    return 
"Errore nell'upload del file";
                }
            } else {
                return 
"Tipo di file non accettato!";
            }
        } else {
            return 
"Dimensione del file troppo grande, massima dimensione accettata: " $maxSize " kilobyte";
        }
    } elseif (isset(
$_POST['upload'])) {
        return 
"Nessun file inserito!";
    }
}

for (
$i 0$i count($_FILES['file']['name']); $i++) {
   
    
$query 'insert into images (image_caption,image_date,image_category) values ("' $image_caption '","' $image_date '","' $image_category '")';

    
$result mysql_query($query$db) or die(mysql_error($db));
    
$last_id mysql_insert_id();

 echo 
"Risultato file " . ($i 1) . ": " singleUpload($i$last_id$cartella$maxSize$acceptType) .  "
"
;


ps. un appunto: quando fai la query di insert, dovresti verificare di eseguirla solo nel caso in cui il file sia effettivamente stato uplodato, altrimenti ti potresti trovare dei dati incongruenti tra la base di dati e il file system (puoi anche usare una transazione)