2011-03-17 67 views
5

所以我有這個簡單的登錄功能,試圖將電子郵件地址與數據庫中的密碼相匹配,並通過表單將其與用戶輸入的數據進行比較。如何在php中查詢mongo?

function login($email, $password){ 
    $m = new Mongo("localhost"); 
    $m->connect(); 
    $db = $m->users; 
    $collection = $db->test_collection; 

    echo "<pre>"; 
    var_dump($collection->findOne(array('name' => 'john'))); //returns correctly 
    var_dump($collection->find(array('name' => 'john'))); //returns mongo cursor object 
    echo "</pre>"; 
} 

我不明白爲什麼find()方法只返回遊標對象。答案?

這是蒙戈文件

array(5) { 
    ["_id"]=> 
    object(MongoId)#22 (1) { 
    ["$id"]=>"4d7eaa848baf84d32b000000" 
    } 
    ["activated"]=> (true) 
    ["email"]=> "[email protected]" 
    ["name"]=> "john" 
    ["password"]=> "334c4a4c42fdb79d7ebc3e73b517e6f8" 
} 

我怎麼會做一個「WHERE」查詢會發現在同一文件中電子郵件和密碼?我顯然沒有得到正確的find()和findOne()查詢參數。什麼是PHP中正確的語法?

回答

5

find應該返回一個光標 - 您可以在這裏閱讀更多關於它們的信息:http://www.mongodb.org/display/DOCS/Queries+and+Cursors。 要從光標獲取文檔,您必須對其進行迭代。

在你的情況下,findOne可能是你之後的,因爲你不希望多個用戶使用相同的用戶名和密碼。 findOne函數總是返回最多一個文檔,所以不需要遊標。

有多個謂詞在查詢中,只需添加更多的字段查詢數組:

var_dump($collection->findOne(array('name' => 'john', 'password' => '334c4a4c42fdb79d7ebc3e73b517e6f8'))); 

(如果這是正確的PHP - 我的PHP是一個有點生疏)

1

嘗試

return count($collection->find(array('name' => $name, 'password' => $password)));