Because you are retrieve the same message over and over. Don't you see you are fetching the message inside a loop? This is your code:
foreach ($products as $row) { // fetching message } // you should fetch message HERE
Never mind... I see you have an if in there to check that is is the last row.. still it would be a lot cleaner to have it outside.