2011-05-08 94 views
0

我一直在嘗試爲驗證腳本更改一些代碼,以便它不包含goto,因爲我想在虛擬主機上運行我的腳本,但不幸的是,它們中的大多數並不真正擁有5.3或更高版本。用函數代替goto,爲什麼這不起作用?

該代碼旨在使用由rand生成的值作爲唯一驗證號。如果它發現它已經存在於數據庫中,它將會根據需要多次追加1,直到它找到一個可用的數字。非常簡單。我知道這是一個MySQL查詢的可怕做法,但它實際上只是一個簡單的練習腳本。

的代碼如下:

function gen_val($val) 
{ 
    $query = mysql_query("SELECT val_id FROM users_tmp WHERE val_id=$val"); 
    $row = mysql_fetch_array($query); 
    if ($row[0]==$val) { 
     gen_val($val+1); 
    } else { 
     return $val; 
    } 
} 

$val_x=gen_val(rand()); 

這將返回一個值「0」,如果值在DB已經存在。如果沒有類似的值,函數可以正常工作,所以我認爲函數遞歸存在問題。我不認爲我真的知道如何正確使用它,所以請繼續教育我。

乾杯。

Asher

+1

隨着數據庫的增長,只是FYI,這個特定的功能會變得越來越慢。 MySQL內置了獨特的id功能,這是不必要的。 – 2011-05-08 06:09:07

回答

2

你忘了返回遞歸結果。

return gen_val($val+1); 
+0

它只返回符合if條件的遞歸最後一次迭代的值,但每次後續完成時,都不返回返回值,包括調用gen_val的第一次迭代。 – 2011-05-08 05:51:51

+0

因爲遞歸併不總是涉及返回一些東西。 – 2011-05-08 06:07:27

+0

因爲你寫了'return $ val',所以它返回'$ val'。它不會自行返回'$ val'。 – 2011-05-08 06:12:50

1

糾正我,如果我錯了,但你想獲得每個用戶的唯一ID。 MySQL具有此功能。

相關問題