我有一个学生用ID字段作为主键,但没有自动编号 插入新记录时,我必须调用getNextID()函数来获取要插入的下一个id
function getNextID(){
/*I am type code inside function now not copied from actual code but consider it will return max_1*/
$max_id = $this->Student->find('list',array(
'fields'=>array('id'),
'order'=>array('id desc'),
'limit'=>1
));
$next_id = $max_id + 1;
}
我面临的问题是 当多个用户同时调用此函数时,两个用户将获得相同的$ next_id并且它将被复制 我想知道如何防止重复 注意:我无法将其设为自动编号
答案 0 :(得分:2)
答案 1 :(得分:0)
我已经通过将静态变量$locked
定义为
private static $locked;
并在egtNextID()函数中稍作修改
function getNextID(){
self::$locked = true;
$max_id = $this->Student->find('list',array(
'fields'=>array('id'),
'order'=>array('id desc'),
'limit'=>1
));
$next_id = $max_id + 1;
self::$locked = false;
return $next_id;
}
并在将getNextID()调用为
之前添加了几行 while(self::$locked != false){
sleep(1);
}
这解决了我的问题
答案 2 :(得分:0)
使用下面提到的函数获取唯一ID: -
public function createId( $intOnly = true ) {
$fixed = 1390000000;
$t = explode( " ", microtime() );
$uid = $t[1] - $fixed;
return ( $intOnly ) ? $uid : uniqid();
}
默认为整数,如果传递参数false
,则会给出字符串。
它将始终返回唯一ID。