Provavelmente é melhor fazer isso como um único pedaço 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'
Cuidado para não repetir isso várias vezes sem alguma forma de verificar se um pedido ainda não foi usado para atualizar o estoque
Fazendo desta forma, se você tivesse 1000 itens no pedido então é uma única consulta. Fazer uma seleção e, em seguida, percorrer os resultados exigiria 10.001 consultas.