Вие правите заявка и съхранявате резултатен ресурс в $result1, след което извличате всички редове в цикъл, който ехото извеждате, след което веднага се опитвате да го извлечете отново. След като извлечете всички резултати, не можете да ги извлечете отново. Е, можете, като използвате mysql_data_seek, но в повечето случаи е наистина неефективно и разточително. Съхранявайте резултатите от първия път в масив.
$rows = array();
while ($row = mysql_fetch_assoc($result1)) {
$rows[] = $row;
}
След това можете foreach през този масив.
foreach ($rows as $row) {
// Build the binary notification
$msg = chr(0).pack('n', 32).pack('H*', $row['devicetoken']) . pack('n', strlen($payload)) . $payload;
//... etc
}