Как жестко закодированный номер в php превращается в другой номер в моей базе данных? Странный - PullRequest
0 голосов
/ 24 января 2012

У меня загадочная ошибка ...

Хорошо, я работаю в LocalHost с последней версией на MySQL. Я работаю с CodeIgniter (2.0.2) Я пытаюсь реализовать такую ​​функцию в модели:

function saveMyFriends($friends_list){

$this->load->library('encrypt');    
    foreach($friends_list as $friend){
        // echo $friend['id'].' : '.utf8_decode($friend['name']).'</br>';

        $query_str ="INSERT INTO sc_friends (fb_id, fb_friends_id, fb_friends_name) VALUES ( ?, ?, ?)";
        $fb_id =$this->session->userdata('user_fbid');
        $this->db->query($query_str, array($fb_id, $friend['id'], sha1(utf8_decode($friend['name']))));
    }
    return TRUE;
}

Что должно сохранить в базе данных мой список друзей в Facebook, но бывает, что около 5% результатов имеют одинаковый Fb_id ... Что невозможно. Поэтому я попытался ввести некоторых друзей вручную, я просто изменил enter code here несколько строк:

    function saveMyTwoFriends(){

$this->load->library('encrypt');    
        $query_str ="INSERT INTO sc_friends (fb_id, fb_friends_id, fb_friends_name) VALUES ( ?, ?, ?)";
        $this->db->query($query_str, array(7518777XX, 1000028691344XX, sha1(utf8_decode('XXX XXXX'))));
    return TRUE;
}

(Конечно, X - это либо действительное число, либо настоящее имя) Но еще раз, в моей базе данных, когда я ввел третий вручную (тот, который я привожу здесь в качестве примера), у меня был повторяющийся "тот же идентификатор": "2147483647"

Как это возможно? Спасибо:)

Ответы [ 2 ]

4 голосов
/ 24 января 2012

2147483647 - самое большое целочисленное представление в 32-битном PHP. Если ваша библиотека базы данных пытается обработать большее число, например, 100002869134477, как целое число - вы получите 2147483647. Вы можете использовать числа с плавающей запятой или константы или расширения, такие как bcmath или gmp, если вам нужно работать с большими числами.

0 голосов
/ 24 января 2012

Facebook всегда определяет / возвращает идентификатор пользователя Facebook как string, поэтому я бы использовал varchar() в вашей базе данных вместо bigint()

id - идентификатор пользователя Facebook.string.

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