Как-то так будет это выглядеть на данном этапе
$sql = "
SELECT
`status`, `ip_address`
FROM
`devices`
";
$result = mysqli_query($link, $sql);
if (mysqli_num_rows($result) > 0) {
$new_status = Array();
$array_status = array();
while ($row = mysqli_fetch_assoc($result)) {
exec("ping -c 1 " . $row["ip_address"], $output, $execResult);
if (empty($execResult)) {
$new_status['ok'][] = $row["ip_address"];
} else {
$new_status['bad'][] = $row["ip_address"];
}
$status = (empty($execResult)) ? 0 : 1;
if ($status != $row["status"]) {
$array_status[] = "(
'".$row["ip_address"]."',
$status,
NOW()
)";
}
}
}
if (Count($new_status['ok'])) {
$sql = "
UPDATE
`devices`
SET
`status`=1
WHERE
`ip_address` IN ('".implode("', '", $new_status['ok'])."')
";
mysqli_query($link, $sql);
}
if (Count($new_status['bad'])) {
$sql = "
UPDATE
`devices`
SET
`status`=0
WHERE
`ip_address` IN ('".implode("', '", $new_status['bad'])."')
";
mysqli_query($link, $sql);
}
if (count($array_status) > 0) {
$sql = "
INSERT INTO
`devices_history`
(`ip`, `status`, `date`)
VALUES
".implode(',', $array_status)."
";
mysqli_query($link, $sql) or die(mysqli_error());
}