2013-03-11 130 views
0

看看下面的代碼。這應該檢查數據庫是否包含給定的用戶。如果這樣做,它只是返回true。如果不是,那麼它返回false。PHP MYSQL if語句上的PDO結果

無論如何,無論數據庫中存在用戶和密碼,出於某種原因它不會評估爲真! ! !

function databaseContainsUser($email, $password) 
{ 

    include $_SERVER['DOCUMENT_ROOT'].'/includes/db.inc.php'; 

    try 
    { 
     $sql = 'SELECT COUNT(*) FROM wl_user 
       WHERE email = :email AND password = :password'; 
     $s = $pdo->prepare($sql); 
     $s->bindValue(':email', $email); 
     $s->bindValue(':password', $password); 
     $s->execute("USE $dbname"); 
    } 
    catch (PDOException $e) 
    { 
     $error = 'Error searching for user. ' . $e->getMessage(); 
     include $_SERVER['DOCUMENT_ROOT'].'/includes/error.html.php'; 
     exit(); 
    } 

    $row = $s->fetch(PDO::FETCH_NUM); 

    if ($row[0] > 0) 
    { 
     return TRUE; 
    } 
    else 
    { 
     return FALSE; 
    } 
} 

任何幫助,將不勝感激

回答

0

爲您傳遞"USE $dbname"字符串來執行一些未知的原因。
刪除該字符串。

此外,你正試圖捕捉一個異常,但顯然不告訴PDO拋出它們。 而你正在追趕它只是爲了迴應一個信息,這是一個很大的禁忌。 我最近在this answer

最近解釋瞭如果你的問題不同,你必須問(或者更好 - 谷歌這個問題)。
請參閱PDO tag wiki以瞭解正確的連接選項,包括數據庫選擇和錯誤報告。

+0

我把'代碼'「USE $ dbname」'代碼',因爲我得到的原因 - > SQLSTATE [3D000]:無效的目錄名稱:1046沒有選擇數據庫< - 錯誤。我只是試着運行代碼,刪除它,然後再次發生......由於某些原因,它不能保存數據庫名稱.... – cerberus1818 2013-03-11 05:40:55

-1

試試這個

try 
{ 
    $pdo = new PDO('mysql:host=localhost;dbname=yourDbName;', 'root', '', 
    array(PDO::ATTR_PERSISTENT => true)); 
    $sql = 'SELECT count(*) FROM user WHERE email = :email AND password = :password'; 
    $s = $pdo->prepare($sql); 
    $s->bindValue(':email', $email); 
    $s->bindValue(':password', $password); 
    $s->execute(); 
} 

這是本地服務器的例子,只是改變yourDbName到你的數據庫的名稱。我只是在我的本地服務器上運行此代碼,它正在工作。