@pixal

Почему если сменить аккаунт в Telegram, бот перестает записывать верный id в базу?

Всем привет! Пишу бота на php. Все работает великолепно, но если сменить аккаунт в телеге, в базу записывается левый chat_id, а именно 2147483647, который не понятно кому принадлежит, это вообще что? Но если удалить телграм и войти заново, то все норм, до добавления нового аккаунта в клиент и попытки запустить бота. Помогите пожалуйста разобраться.

кодж, который глючит:
if ($message == '/start') {
  // Проверяем, есть ли пользователь в базе данных
  $user = $conn->getUsersByTid($tid);
  if (!$conn->getUsersByTid($tid)) {
      // Если пользователя нет, создаем нового
      $conn->createUser($tid, $username);
      // Просим пользователя ввести имя
      $response = "Как Вас зовут?".$tid;
      $conn->updateState($tid, 'wait_phi');
      sendMessage($tid, $response, false);
      
  } else {
      // Если пользователь уже есть в базе данных, приветствуем его
      $response = "С возвращением, " . $user[0]['phi'] . "!";
      sendMessage($tid, $response, false);
  }
  • Вопрос задан
  • 247 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
2147483647 = 231 - 1
Это максимальное 32-битное знаковое целое. В доке на Telegram API читаем:
chat_id - This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float type are safe for storing this identifier.
То есть, для хранения chat_id надо использовать 64-битные значения. Для MySQL, например, это тип BIGINT.
И общий совет - не бойтесь отлаживать свои программы. Встретили что-то непонятное - обмажьте это место логами, отладочными выводами, информацией о предупреждениях и ошибках. Выводите всё, что может иметь отношение к проблеме. Потом анализируйте, локализуйте точное место проблемы. В данном случае логи бы показали, что из API приходит одно значение chat_id, а в базе сохраняется другое. А ещё, возможно, вы бы увидели сообщение от базы данных, что при записи значения оно было обрезано (как минимум MySQL такое сообщение выдаёт).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы