2011-08-03 1 views
0

내가 뭘 하려는지, 무작위 문자열을 만들고, 테이블에 대해 이미 존재하는 경우이를 확인하고, 새로운 임의의 문자열을 만든 후 다시 테이블에 삽입하지 않으면 다시 시도하십시오.임의의 문자열을 만들고, 테이블에 대해 검사하고, 이미 존재하는 경우 new를 만들고 다시 시도하십시오. 그렇지 않으면 insert - script가 작동하지 않습니까?

내 스크립트는 어제받은 스크립트를 기반으로하며, 모두 if(mysql_num_rows($result) == 0) 외의 계획대로 작동하며, 자동으로 false를 반환하고 else 문을 실행합니다. 나는 진위 여부에 상관없이 if 문을 실행하는 0 대신 1로 값을 변경하려고 시도했습니다 (예 : $authcode ="eey7y764";과 같은 문자열에 대해 $authcode = dechex($num1).$dechex($num2);을 스왑하고 있지만 아직 테이블에 존재하지 않음). if 문을 여전히 실행합니다).

function authCode() { 

$num1 = mt_rand(1, 2147483647); 
$num2 = mt_rand(1, 2147483647); 
$authcode = dechex($num1).dechex($num2); 

include("../db/71cfde725dc86.php"); 

$conn = mysql_connect($db_host, $db_uname, $db_pword) or die("Couldn't connect because ".mysql_error()); mysql_select_db($db_name); 
$query = "SELECT COUNT(*) FROM records WHERE valcode='$authcode'"; 
$result = mysql_query($query) or die("SELECT query failed due to ".mysql_error()); 

if(mysql_num_rows($result) == 0) 
{ 
    $authCode = authCode(); 
} 
else 
{ 
$query2 = "INSERT INTO records (valcode) VALUES ('$authcode')"; 
$result2 = mysql_query($query2) or die("INSERT query failed due to ".mysql_error()); 
} 

mysql_close($conn); 

return $authcode; 
} 

authCode(); 

당신이 내가 원하는대로 변경 기능을 가지고 할 필요가 무엇인지 말해 주 시겠어요 :

여기 내 스크립트입니까?

모든 의견이나 조언을 크게 부탁드립니다 :)!

답변

1

행 수를 비교하지 않으려합니다. COUNT(*)을 선택했기 때문에 항상 1입니다. 그것은 항상 하나의 번호를 줄 것입니다 (희망적으로 0 또는 1). 당신은 0과 1을 그 숫자의 VALUE에 비교해야하며, 그 숫자의 숫자가 아닌 (항상 1이 될 것입니다).

$row = mysql_fetch_array($result); 
if($row['COUNT(*)']==1) ... 

또한, 당신은 재귀하지 그런 authCode()를 호출하지 않습니다. 오픈 DB 연결의 큰 스택을 만들 수 있습니다 (비용이 많이 들지 않고 신속하게 열리고 닫히는 것은 말할 것도 없습니다). 당신은 아마 연결을 따라 가고 싶을 것이다.

function authCode($conn){ 
    ... 
    $authCode = authCode($conn); 
} 
$conn = mysql_connect(...); 
authCode($conn); 
mysql_close($conn); 
+0

그래서, 난 그냥'FROM'을 선택 (*) FROM' COUNT 선택 "'변경해야?, 또는 당신은 내가 완전히 다른 비교 함수를 사용할 필요가 말을? – Fireworksable

+0

을 내가 전달하는 데 사용할 수있는 어떤 기능 authCode();가 호출되기 전에 그냥 닫을 수 없었고, else 문에서 다시 연결 했습니까? – Fireworksable

관련 문제