Probablemente sea mejor hacer esto como una sola pieza 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'
Tenga cuidado de no volver a ejecutar esto varias veces sin alguna forma de verificar que un pedido no se haya utilizado para actualizar el stock
Haciéndolo de esta manera, si tenía 1000 artículos en el pedido, entonces es una sola consulta. Hacer una selección y luego recorrer los resultados requeriría 10001 consultas.