2013-07-07 71 views
-1

以下是我正在使用的功能。這很奇怪,因爲當我測試名稱「admin」時,它會返回一個包含所有正確列和值的關聯數組,但根據我所知,每個其他名稱測試都會返回0,這意味着查詢中沒有任何內容(我正在輸入它們在數據庫中的名稱完全一樣)。在一種情況下給出正確答案的功能,不在其他任何情況下

我有一種感覺,這可能是pdo的某種安全特性或某種東西,但我不明白爲什麼它採取這種方式。

我正在使用mysql。

有誰知道這個問題以及如何解決它?謝謝!

function getUserDetailsByName($name, $fields = "*") 
{ 
    $db = connect_db(); 

    $query = "SELECT $fields FROM UserDetails WHERE userName=:username"; 
    $result = $db->prepare($query); 
    $result->bindParam(":username", $name); 

    if (!($result->execute())) { 
     sendMessage (1,1,'Query failed',$query); 
     $db = null; 
     return; 
    } 
    if (!($result->fetch(PDO::FETCH_NUM) > 0)) { 
     $db = null; 
     return 0; 
    }else{ 
     $result = $result->fetch(); 
     $db = null; 
     return $result; 
    } 
} 

編輯:有人問我如何調用函數。

$user = getUserDetailsByName($_POST['value']); 
if($user == 0) 
{ 
    print "user = 0"; 
} 
print_r($user); 
+0

請出示你是如何調用該函數!而且,最後的'else'是沒有意義的。它不像之前的'if + return'會超出'return'。 – CodeAngry

回答

2
function getUserDetailsByName($name, $fields = "*"){ 
    $db = connect_db(); 

    $query = "SELECT {$fields} FROM UserDetails WHERE userName = :username LIMIT 1;"; 
    if(!$result = $db->prepare($query)){ 
     return null; 
    } 
    $result->bindParam(":username", $name); 
    if(!$result->execute()) { 
     sendMessage (1,1,'Query failed',$query); 
     return null; 
    } 
    if(!$user = $result->fetch(PDO::FETCH_NUM)) { 
     return false; 
    } 
    return $user; 
} 

爲什麼2個取?結帳並將其與您的代碼進行比較。

使用這樣的:

if($user = getUserDetailsByName($_POST['value'])){ 
    // we have a user! 
}else{ 
    // we don't have a user! 
} 
+0

啊哈,我沒有意識到它是兩次獲取最高值,我現在將編輯它,看看它是否有所作爲。雖然我很好奇它是如何用一個名字而不是另一個名字工作的? – AndrewB

+1

@AndrewB重複數據庫記錄?:)'管理員'在那裏兩次。 – CodeAngry

+1

您的初始代碼已經工作,非常感謝您的時間! – AndrewB

相關問題