2013-08-20 36 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插入數據庫中,如果mysqli_stmt_num_rows($stmt) == 0。但是,如果ID已經存在,它不會生成一個新的6位隨機ID,它不會檢查該ID是否已經存在於數據庫中,等等。我可以想象,我將不得不使用某種類型的循環將繼續生成一個隨機ID,直到它不存在於數據庫中,然後將其插入到數據庫中。我已閱讀了幾個循環(如whilefor),但我不知道如何使用它們。

任何人都可以幫助我解決這個問題,或幫助我走向正確的方向嗎?

乾杯

+0

你爲什麼不只是使用一個自動增加的id字段?爲什麼學生ID必須是「隨機的」?另外,你正在使用哪個數據庫? – Bohemian

+0

因爲我想要ID有6位數字,我認爲自動遞增從1開始。基本上沒有其他原因,我只是想讓ID是隨機的(雖然這有點傻)。我使用MySQL作爲我的數據庫。 – Steef

+0

沒問題。看到我的新答案:) – Bohemian

回答

0

如果您只需要6位數字,請使用自動i增加列,但是它的起始點是100000,而不是通常的起始值1

你可以在時間去做你創建表:

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

看到這個證明上SQLFiddle

或者如果表已經有自動遞增列存在,你可以將它設置:

ALTER TABLE MYTABLE AUTO_INCREMENT = 100000; 
+0

這是一個很好的解決方案。它比生成一個隨機數更有意義,檢查它是否已經存在等。我將這個標記爲我的解決方案,因爲我將在我的代碼中使用它。謝謝! :) – Steef

0

,如果你不希望使用自動增量領域,你可以改變這種方式查詢:

SELECT id FROM students WHERE id = ? limit 1 

becames

SELECT count(id) FROM students WHERE id = ? 

所以,你可以檢查結果是> 0(存在)或不存在(不存在)

+0

謝謝!這是真的,我錯過了我的查詢中的那一部分。儘管我仍然需要循環查詢,直到結果爲0,然後執行INSERT查詢。 – Steef

相關問題