Il est probablement préférable de le faire en un seul morceau de SQL :-
UPDATE stock a INNER JOIN order b ON a.part = b.part
SET a.available = a.available - b.qty
WHERE b.invoice` = '$order'
Faites attention à ne pas recommencer plusieurs fois sans avoir un moyen de vérifier qu'une commande n'a pas déjà été utilisée pour mettre à jour le stock
En procédant de cette façon, si vous aviez 1000 articles sur la commande, il s'agit d'une seule requête. Faire une sélection puis faire une boucle autour des résultats nécessiterait 10001 requêtes.