2013-08-20 5 views
0

나는 코드 mt_rand(100000,999999);으로 6 자리 난수를 생성하고 변수 $student_id에 저장하는 코드가 있습니다. 다음 코드를 사용하여 숫자가 데이터베이스에 있는지 확인합니다.ID가 데이터베이스에 있는지 확인하는 방법, 그렇지 않으면 데이터베이스에 삽입 하시겠습니까?

if($stmt = mysqli_prepare($connect, "SELECT id FROM students WHERE id = ? LIMIT 1")) { 
    mysqli_stmt_bind_param($stmt, "i", $student_id); 
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_store_result($stmt); 
    mysqli_stmt_bind_result($stmt, $db_id); 
    mysqli_stmt_fetch($stmt); 
} 

if(mysqli_stmt_num_rows($stmt) == 1) { 
    echo "The ID exists."; 
} else { 
    // Insert $student_id into database 
} 

이 코드는 인 경우 ID를 데이터베이스에 삽입 할 수 있습니다. 그러나 ID가 이미 존재하면 새 6 자리 임의의 ID가 생성되지 않으며 해당 ID가 이미 데이터베이스에 존재하는지 확인하지 않습니다. 어떤 종류의 루프를 사용해야한다고 생각할 수 있습니다. 데이터베이스에 존재하지 않을 때까지 임의의 ID를 생성 한 다음 데이터베이스에 삽입합니다. 몇 루프 (예 : while 또는 for)에 대해 읽었지만 사용 방법을 모릅니다.

누구든지 나를 도와 주거나 올바른 방향으로 나를 도울 수 있습니까? 그래서 당신이 경우 확인할 수 있습니다

SELECT id FROM students WHERE id = ? limit 1 

SELECT count(id) FROM students WHERE id = ? 

을 becames : 당신이 자동 증가 필드를 사용하지 않으려면

건배

+0

왜 그냥 자동 증가 id 필드를 사용하지 않는? 학생 ID는 왜 "임의"이어야합니까? 또한, 어떤 데이터베이스를 사용하고 있습니까? – Bohemian

+0

ID에 6 자리가 있어야하고 자동 증가가 1부터 시작한다고 생각했기 때문에 기본적으로 ID가 임의적이어야한다는 것 외에는 다른 이유가 없습니다 (바보 같지만). 내 데이터베이스로 MySQL을 사용합니다. – Steef

+0

문제 없습니다. 내 새로운 대답을보십시오 :) – Bohemian

답변

0

6 자리가 필요하면 자동 i ncrement 열에서 시작하지만 1의 일반적인 시작 값 대신에 100000에서 시작해야합니다. 당신은 시간에 그것을 할 수

당신은 테이블을 만들 :

CREATE TABLE MYTABLE (
    ID INT NOT NULL AUTO_INCREMENT, 
    -- other columns 
) 
AUTO_INCREMENT = 100000; 

이이 SQLFiddle에 시연을 참조하십시오.

또는 테이블이 이미 자동 증가 열이있는 경우

, 당신은 그것을 설정할 수 있습니다

ALTER TABLE MYTABLE AUTO_INCREMENT = 100000; 
+0

훌륭한 솔루션입니다. 그것은 임의의 숫자를 생성하는 것보다 이미 의미가 있습니다. 이미 존재하는지 확인하는 것입니다. 코드에서 이것을 사용할 때 이것을 해결책으로 표시 할 것입니다. 감사! :) – Steef

0

, 당신은 이런 식으로 쿼리를 변경할 수 있습니다 결과가 0 (존재)이거나 존재하지 않음 (존재하지 않음)

+0

감사합니다. 그건 사실이야, 나는 그 부분을 내 질문에 빠뜨렸다. 결과가 0이 될 때까지 계속 쿼리를 반복해야하지만 INSERT 쿼리를 수행합니다. – Steef

관련 문제