【问题标题】:Creation of unique id创建唯一标识
【发布时间】:2012-02-23 05:21:54
【问题描述】:

我正在使用函数来使用表中的最后一个 ID 创建唯一 ID。但是问题来的时候 人大约在同一时间打开。您能否建议对当前功能进行任何纠正?由于此功能用于生产和实时服务器,因此对代码稍作调整会好得多。

这里是函数使用:

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

【问题讨论】:

  • 不要这样做。只需使用普通的 auto_increment 主键字段作为 id。用零填充输出它是一个显示问题,不应考虑如何生成 id。

标签: php mysql codeigniter


【解决方案1】:

在 ID 列上使用 MySQL 的 AUTO_INCREMENT 功能。它将使每一行现在都有一个递增的唯一 ID。

Read more.

【讨论】:

    【解决方案2】:

    查询数据库以获取最后一个 ID、递增,然后依赖该 ID 是唯一的,因为您遇到的问题是不安全的,如果多个用户可以并且将同时使用该 ID同时打开页面。

    解决这个问题的方法是插入到使用auto_increment 字段的数据库表中,并在成功后获取最后一个插入ID 作为主键。这是使用 PHP mysql 函数mysql_insert_id() 完成的。 CodeIgniter 使用 insert_id() 也具有此功能,它是 PHP mysql_insert_id() 函数的简单包装器。

    $this->db->insert_id();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 2014-05-05
      • 2021-10-01
      相关资源
      最近更新 更多