2011-03-17 30 views
5

Tengo esta sencilla función de inicio de sesión que intenta hacer coincidir la dirección de correo electrónico con una contraseña en la base de datos y compararla con los datos ingresados ​​por el usuario a través del formulario.Cómo consultar mongo en php?

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>"; 
} 

No entiendo por qué el find() solo devuelve un objeto de cursor. Respuestas?

Este es el documento mongo

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

¿Cómo puedo hacer una consulta "WHERE" que se encuentra tanto el correo electrónico y la contraseña en el mismo documento? Obviamente no estoy obteniendo los parámetros correctos para las consultas find() y findOne(). ¿Cuál es la sintaxis correcta en PHP?

Respuesta

5

Se supone que find devuelve un cursor; puede leer más sobre ellos aquí: http://www.mongodb.org/display/DOCS/Queries+and+Cursors. Para obtener los documentos del cursor, tendrá que iterar sobre él.

En su caso, findOne es probablemente lo que está buscando ya que no espera que varios usuarios tengan el mismo nombre de usuario y contraseña. La función findOne siempre devuelve como máximo un documento, por lo que no es necesario un cursor.

tener múltiples predicados en sus consultas, basta con añadir más campos a la matriz de consulta:

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

(Si ese es PHP correcta - mi PHP es un poco oxidado)

1

tratar

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