Mi dispiace se ho frainteso la domanda:il codice che hai postato non sembra produrre l'output che hai postato, tuttavia, ecco i miei due centesimi; Penso che per risolvere il problema che stai riscontrando con le intestazioni delle tabelle che si ripetono nei risultati, devi posizionare il blocco che dice:
echo '<tr>';
echo '<th style="border-color:#000000; border-style:solid; border-width:1px;font-size:10px;background-image:url(images/buts3.png);color:white"">Product Code</th>';
echo '<th style="border-color:#000000; border-style:solid; border-width:1px;font-size:10px;background-image:url(images/buts3.png);color:white"">Name</th>';
All'interno di un blocco if, in modo tale che venga visualizzato solo una volta:
if(!$displayed) {
$displayed = true;
echo '<tr>';
echo '<th style="border-color:#000000; border-style:solid; border-width:1px;font-size:10px;background-image:url(images/buts3.png);color:white"">Product Code</th>';
echo '<th style="border-color:#000000; border-style:solid; border-width:1px;font-size:10px;background-image:url(images/buts3.png);color:white"">Name</th>';
}
E non dimenticare di inizializzare $visualizzato su false prima il ciclo while.
Inoltre, ma un po' a parte la domanda reale, questo codice che hai postato è molto insicuro, poiché è vulnerabile a un attacco noto come sql injection. Ti consiglio di utilizzare qualcosa come le dichiarazioni preparate da PDO per assicurarti di non subire problemi di sicurezza.