Förmodligen bäst att göra detta som en enda del av SQL:-
UPDATE stock a INNER JOIN order b ON a.part = b.part
SET a.available = a.available - b.qty
WHERE b.invoice` = '$order'
Se upp att du inte bara kör om detta flera gånger utan att på något sätt kontrollera att en beställning inte redan har använts för att uppdatera lagret
Om du gör det på detta sätt, om du hade 1000 artiklar på beställningen så är det en enda fråga. Att göra ett urval och sedan gå runt resultaten skulle kräva 10 001 frågor.