use*_*641 4 php mysql codeigniter
我正在使用函数来使用表中的最后一个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;
}
Run Code Online (Sandbox Code Playgroud)
这将产生:APN/0371
查询数据库中的最后一个ID,增量,然后依赖该ID在您遇到时是唯一的是不安全的,如果他们打开页面,则该ID可以并且将由多个用户同时使用同时.
解决这个问题的方法是插入使用auto_increment字段的数据库表,并在成功时获取最后一个插入ID作为主键.这是使用PHP mysql函数mysql_insert_id()完成的.CodeIgniter也使用insert_id()来实现此功能,insert_id()是PHP mysql_insert_id()函数的简单包装器.
$this->db->insert_id();
Run Code Online (Sandbox Code Playgroud)