Создание уникального идентификатора - PullRequest
4 голосов
/ 23 февраля 2012

Я использую функцию для создания уникального идентификатора, используя последний идентификатор из таблицы.Но проблема возникает, когда человек открывается примерно в одно и то же время.Не могли бы вы предложить какие-либо исправления в текущей функции?Так как эта функция используется на производстве и на живом сервере, небольшая подстройка в коде будет намного лучше.

Вот функция с использованием:

function approvalNumber()
    {
        $data=array();
        $text = "APN/";
        $position = "front";
        $this->db->order_by('approval_id','desc');
        $this->db->limit('1','0');
        $query=$this->db->get('approval_note');
        if($query->num_rows()>0)
        {
            foreach($query->result_array() as $row){
                $data[] = $row;                 
            }
        }
        $query->free_result();
        if(count($data))
        $id=str_pad((int) $data['0']['approval_id']+1,4,"0",STR_PAD_LEFT);
        else
        $id='0001';
        return $approvalNo = $text.$id; 
    }

Это приведет к: APN / 0371

Ответы [ 2 ]

6 голосов
/ 23 февраля 2012

Используйте функцию MySQL AUTO_INCREMENT в столбце ID.Теперь каждая строка будет с добавочным уникальным идентификатором.

Подробнее ...

5 голосов
/ 23 февраля 2012

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

Способ обойти это - вставить в таблицу базы данных, которая использует поле auto_increment , и в случае успеха получить идентификатор последней вставки в качестве первичного ключа. Это делается с помощью функции PHP mysql mysql_insert_id () . CodeIgniter также обладает этой функциональностью, используя insert_id () , который является простой оболочкой для функции PHP mysql_insert_id () .

$this->db->insert_id();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...