К тому же если в таблице notifications первое поле 'id' с типом integer то ошибка очевидна, передается пустая строка вместо числа.скорее всего это поле автоинкремент и будет заполняться автоматически, если это не так - то во первых таблица построена неправильно, а во вторых - запрос выдаст ошибку если вставить в консоль руками.
Еще заметил, что скрипту все ровно какое название у таблицы с оповещениями ошибку все равно не показываетскорее всего мускуль подключается в нестрикт моде, и все ошибки давятся на уровне драйвера.
function SendNotice($p1, $p2) {
var_dump($p1);
var_dump($p2);
global $mysqli;
var_dump($mysqli);
$sql = "SELECT `id` FROM `users` WHERE `login` = '$p1'";
var_dump($sql);
$row = mysqli_fetch_assoc(mysqli_query($mysqli, $sql));
var_dump($row);
if (!$row['id']) echo 'Ошибка!';
$sql = "INSERT INTO `notifications` VALUES ('', $row[id], 0, NOW(), '$p2')";
var_dump($sql);
mysqli_query($mysqli, $sql);
}