2012-10-15 1 views
0

나는 사용자를 위해 키 코드를 생성해야하므로 DB에서 고유해야합니다.PHP에서 데이터가 고유하거나 SQL 쿼리를 만들 때까지 PHP/SQL 반복주기 adhoc

나는 키가 고유 때까지이 사이클을 반복해야합니다 : 내가 약 동안()를 생각하지만를 구현하는 방법을 이해할 수 없다

create key; 

if($key is not in db){ 

    insert key; 

}else{ 

repeat control with new key; 

} 

.

db 고유 키를 삽입하고 db 고유 키를 업데이트하는 다른 방법은 php 스크립트를 사용하는 대신 SQL 쿼리로 직접 작성할 수 있습니까? (SQL 쿼리를 사용하여 INSERT/UPDATE UNIQUE KEYS)

희망적인 질문입니다.

+2

DB를 정상적으로 돌봐에는 MySQL의 오류가 없다 때까지 행을 삽입하려고 계속 시도 그 표준 직업. 당신이 그 일을위한 최상의 도구가 아닌 PHP로 그 문제를 해결하고자하는 것 같습니다. – hakre

+0

잘 어떻게 삽입 및 MySQL에서 직접 고유 한 임의의 영숫자 해시를 업데이트 할 수 있습니까? 더 확실 할 것이다! 나에게 코드를 보여줄 수 있다면 내 질문을 편집 할 수있다. – sbaaaang

+0

이제 요구 사항을 명확히 했으므로이 질문에 답을 얻었고 대답하기까지했다. 언제든지 사이트를 검색하십시오. 검색시 codeigniter를 찾지 말고 사용중인 특정 데이터베이스 서버에 집중하십시오. – hakre

답변

4
$key = create_unique_key(); 

while(this_key_exists($key)) 
{ 
$key = create_unique_key(); 
} 
//If you got here - the value of $key is unique and doesn't exist in db 

설명 : 먼저 이제 우리가 $key의 시작 값이 사용자 정의 기능 create_uniuqe_key를 사용하여 고유 키를 생성합니다. 둘째, 우리는 while 루프를 가지고, 기억하시기 바랍니다 : 우리는 루프에 얻을 것이다

동안 (EXPR)

한 표현에 true를 돌려줍니다. 우리의 맞춤 함수 this_key_exists (true 또는 false를 반환)이 true를 반환하는 한 (즉, 키가 uniuqe가 아니라는 것을 의미합니다) 데이터베이스에 새로운 고유 키를 만들고 반복해서 확인합니다.

+0

가장 위험한 접근 방법이 없다고 생각합니다. – sbaaaang

+0

나는 또한 그렇게 믿고, 그렇지 않다면 알려줍니다. 행운을 빕니다 :) –

0
/** 
* Creates a unique URL for a page language by adding a 'dash number' 
* at the end of the provided user URL 
* @param string $page The current page 
* @param string $url The URL to make unique 
* @param type $lang The language to make unique for (you can have the same URL for same page in diffrent languages) 
* @return string The new URL 
*/ 
function uniquePageUrl($page, $url, $lang){ 
    while(TRUE){ 
     $result = $this->db->from('pages')->where('page <>', $page)->where('lang',$lang)->where('url',$url)->limit(1)->get()->row(); 
     if($result) //we already have a page URL for this language like the one we try to use 
      $url = increment_string($url,'-'); 
     else 
      return $url; 
    } 
} 
+0

음 나는 동안 (진실) {} pcu를 청구 할 것입니까 ?? – sbaaaang

+0

코드가 올바로 작성되면 최대 3 번 반복 한 후에 코드가 반환됩니다. –

+1

'while (TRUE) {'? 항상 true가 리턴되어 루프가 infinty가 될 때까지 실행됩니다. –

2

UUID

를 사용하거나 데이터베이스의 컬럼에 고유 제한 조건을 추가하고

do { 
    //insert using uniqid() or some random string 
} while($check_for_mysql_error); 
+0

하지만 오류가 발생합니다 !! : D – sbaaaang

+0

1milion 사용자가 있다면 로그 오류 파일은 어떻게 될 것입니까 ?? – sbaaaang

관련 문제