Ошибка при входе пользователей в Facebook - PullRequest
2 голосов
/ 30 сентября 2011

У меня есть приложение на Facebook, и я регистрирую пользователей в своей базе данных (скрипт проверяет, есть ли пользователь на БД, если нет, он добавляет его).Таблица пользователей имеет только одно поле - «идентификатор пользователя», который является первичным ключом.

Сценарий, который проверяет, зарегистрирован ли уже пользователь в БД:

    $selectuser = $db->query("SELECT * FROM `predictorusers` WHERE `userid`='$user'");
if ($db->countRows($selectuser) == 0)
    $db->query("INSERT INTO `predictorusers` (`userid`) VALUES ('$user')");

Теперьпроблема: я не знаю почему, но с определенным пользователем (для большинства пользователей, если он работает просто отлично) он вставляет идентификатор 2147483647 (который даже не существует на Facebook !!), и когда он снова входит в приложение,он получает следующее сообщение:

Дублирующаяся запись '2147483647' для ключа 1

Как будто он пытается добавить его снова, даже если он уже существует в базе данных !!

Кто-нибудь может понять это?

Ответы [ 2 ]

8 голосов
/ 30 сентября 2011

Это касается определения поля в MySQL. Я уверен, что ваше поле имеет тип INT.

Дублирующая запись '2147483647' для ключа 1 == максимальное число для этого типа в MySQL.

Так что, когда идентификатор FB больше этого, MySQL установит его как максимально допустимый, что даст вам дубликаты, когда идентификатор большой, поскольку запись должна быть уникальной.

Измените поле на VARCHAR (255), и ваша проблема будет решена.

ALTER predictorusers ALTER COLUMN userid VARCHAR (255) NULL

0 голосов
/ 27 апреля 2014

используйте BIGINT (20) вместо этого в качестве типа данных.Идентификаторы FB слишком велики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...