А где Вы нашли такой синтаксис функции mysqli::query()? В
описании -
mixed mysqli::query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )
Вы пытаетесь подставить в строку переменные $1, $2 и $3. Где они заданы?
Для mysqli лучше использовать параметризованные запросы. То, что сейчас - уязвимо к SQL-инъекции.
$req = $mysqli->prepare('INSERT INTO `balance_log` (`user_id`, `message`, `amount`, `date`) VALUES (?, 1, ?, ?)');
$time = time();
$req->bind_param('isi', $id, $sum, $time);
$req->execute() or die("Mysql error ".$mysqi->errno.": ".$mysqli->error);
$req->close();
Ну и время лучше хранить в поле с типом TIMESTAMP, а по умолчанию поставить CURRENT_TIMESTAMP, тогда его можно не передавать из программы, база запишет его автоматически при добавлении строки.