ölümcül hata: döngü hiç bitmeyen

2 Cevap php

my code-

function create_id()
{  
    //global $myusername;  
    $part1 = substr("Piyush", 0, -4);  
    $part2 = rand (99,99999);  
    $part3 = date("s");  
    return $part1.$part2.$part3;  
}

echo create_id();  //this is printing fine.

function isUniqueUserID($userIDToCheck)    
{
    $sqlcheck = "Select * FROM ruser WHERE userId='$userIDToCheck';";    
    $resource = mysql_query($sqlcheck)or die(mysql_error());   
    $count = mysql_fetch_assoc($resource);  
    if( count($count) > 0)  
    {return false;}  

    return true;  
}


$userIDVerifiedUnique = false;  
while(! $userIDVerifiedUnique )  
{  
    $userIDToCheck = create_id();  
    $userIDVerifiedUnique = isUniqueUserID($userIDToCheck );  
}

loop is just going on and on from while loop to function IsUniqueUser() ve tersi. ??

2 Cevap

İlk olarak, bu sizin isUniqueUserID() fonksiyonunu değiştirmeyi deneyin

function isUniqueUserID($userIDToCheck)
{

$userIDToCheck = mysql_real_escape_string($userIDToCheck); //prevent SQL injection

$sqlcheck = "Select userId FROM ruser WHERE userId='$userIDToCheck';";
$resource = mysql_query($sqlcheck)or die(mysql_error());
$count = mysql_num_rows($resource);

return ($count > 0) ? false : true;

Sadece satır sayısını saymak için bir ilişkisel dizi dönen hiçbir nokta yok. Ve yapmanın hiçbir anlamı yok bir SELECT * sayarken sadece bunu SELECT userId Eğer ilgilendiğinizden hepsi beri.

Ben senin ruser tablo mümkün olan her kimliği olmadığı sürece isUniqueUserID() return false olacağı başka bir sebep görmüyorum.

Varsa hiçbir satır MySQL sorgudan döndürülen (yani $userIDToCheck o benzersiz, tablo değil) sonra mysql_fetch_assoc dönecektir FALSE. Bu durumda, count(FALSE) döner 1 (bir)! Bu değer sıfırdan büyük işlev verir FALSE olduğundan.

Kısacası, bir satır varsa (dize benzersiz değil) sizin isUniqueUserID function döner FALSE geri döndü; hiçbir satır varsa hala döndürür (dize tektir) döndürdü FALSE.


Veritabanı tablo kontrol için basit, yeni, fonksiyon aşağıdaki gibi görünebilir ...

function isUniqueUserID($userIDToCheck)
{
    $userIDToCheck = mysql_real_escape_string($userIDToCheck); // Assume not already escaped
    $sqlcheck = "SELECT 1 FROM ruser WHERE userId='$userIDToCheck' LIMIT 1";    
    $resource = mysql_query($sqlcheck) or die(mysql_error());
    return (bool) mysql_num_rows($resource);  
}