我使用函数来使用表中的最后一个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
发布于 2012-02-23 13:33:50
在ID列上使用MySQL的AUTO_INCREMENT特性。它将使每个now行都具有一个递增的唯一ID。
发布于 2012-02-23 13:35:20
在数据库中查询最后一个ID、增量,然后依赖该ID是唯一的,这是不安全的,因为如果多个用户同时打开页面,该ID可以且将被多个用户同时使用。
解决方法是插入到使用auto_increment字段的数据库表中,并在成功时获得最后一个插入id作为主键。这是使用PHP mysql函数mysql_insert_id()完成的。使用insert_id()时,CodeIgniter也具有此功能,它是PHP mysql_insert_id()函数的一个简单包装器。
$this->db->insert_id();https://stackoverflow.com/questions/9407630
复制相似问题