Estás haciendo una consulta y almacenando un recurso de resultado en $result1, luego recuperando todas las filas en un bucle que repites, e inmediatamente intentas recuperarlo de nuevo. Una vez que obtenga todos los resultados, no podrá volver a obtenerlos. Bueno, puedes, usando mysql_data_seek, pero es realmente ineficiente y un desperdicio hacerlo en la mayoría de los casos. Almacene los resultados la primera vez en una matriz.
$rows = array();
while ($row = mysql_fetch_assoc($result1)) {
$rows[] = $row;
}
Entonces puede foreach a través de esta matriz.
foreach ($rows as $row) {
// Build the binary notification
$msg = chr(0).pack('n', 32).pack('H*', $row['devicetoken']) . pack('n', strlen($payload)) . $payload;
//... etc
}