Probabilmente è meglio farlo come un unico pezzo di SQL:-
UPDATE stock a INNER JOIN order b ON a.part = b.part
SET a.available = a.available - b.qty
WHERE b.invoice` = '$order'
Fai attenzione a non ripetere l'operazione più volte senza in alcun modo verificare che un ordine non sia già stato utilizzato per aggiornare lo stock
In questo modo, se hai 1000 articoli nell'ordine, è una singola query. Fare una selezione e poi scorrere i risultati richiederebbe 10001 query.