2011-05-08 3 views
0

웹 호스트에서 스크립트를 실행하고 싶기 때문에 goto를 포함하지 않도록 유효성 검사 스크립트의 일부 코드를 변경하려고 시도했지만 불행히도 대부분의 스크립트에는 5.3 이상이 없습니다.goto를 함수로 바꾸면 왜 작동하지 않습니까?

이 코드는 고유 한 유효성 검사 번호로 rand에 의해 생성 된 값을 사용하기위한 것입니다. DB에 이미있는 경우 사용할 수있는 번호를 찾을 때까지 필요한만큼 여러 번 번호에 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에 존재합니다. 이미 비슷한 값이 없으면 함수가 잘 작동하므로 함수를 재귀하는 데 문제가 있다고 생각합니다. 나는 그것을 올바르게 사용하는 법을 정말로 모른다고 생각하지 않습니다. 그래서 제발 가서 교육 시키십시오.

건배.

어셔

+1

데이터베이스가 커짐에 따라 특정 기능이 느려지고 느려질 것입니다. MySQL에는 고유 한 ID 기능이 내장되어 있습니다. 이는 불필요합니다. –

답변

2

재귀 결과를 잊어 버렸습니다.

return gen_val($val+1); 
+0

if 조건을 만족하는 재귀의 마지막 반복에서만 값을 반환하지만 이후의 모든 완료시 gen_val을 호출하는 첫 번째 반복을 포함하여 반환 값이 반환되지 않습니다. –

+0

재귀가 항상 무언가를 반환하는 것은 아니기 때문에. –

+0

'return $ val'을 써서'$ val'을 반환합니다. 그것은'$ val'을 독자적으로 반환하지 않습니다. –

1

내가 틀렸다고 정정하되 각 사용자마다 고유 한 ID를 얻고 싶습니다. MySQL에이 기능이 있습니다.

관련 문제