1

から に変換しmysqlimongodbいますが、基本的なタスクに問題があります。
これは、ログイン認証プロセスの一部です。電子メールとパスワードが dB に設定されたレコードと一致する場合は_id、セッション変数を取得して作成します。

これまでのところ、私が行ったすべての検索には_id、さまざまなステップからの取得に関する情報があるようで、状況に合わせて変更できませんでした。

また、私のロジックが からの翻訳の文字通りすぎる場合は、次のmysqliベスト プラクティスに関する提案をお待ちしています。noSql

$collection = $db->members;
$query = array("email" => $email, "password" => $newpass);
  //$cursor = $collection->findOne($query);  // was told this is better but need deeper understanding
$cursor = $collection->find($query); 
$result = $cursor->count();

if($result==1){
    $_SESSION['email'] = $email;

    //having problems here
    $id = $cursor->findOne(array("_id" => $query['_id']));
    $_SESSION['id'] = $id;

    return true; 
}else 
    return false;

QUESTION_id一意のユーザー名とパスワードを認証した後、どうすれば取得できますか?

4

2 に答える 2

4

クエリの単一性を確保できます(これはログインシステムに適しています)。

したがって、を使用しますfindOne()ドキュメントが返されます。MongoDbでは、ドキュメントまたはドキュメントのカーソルを取得することを忘れないでください。

ドキュメントを確認してください。ドキュメントの一部しか返却できません。公式ドキュメント

$doc = $col->findOne(
       array('pass'=> $pass, 'email'=>$email),//select
       array('_id'=>1)//field selection
);
if ($doc){
   //do your session stuff
}
于 2012-08-24T13:56:18.543 に答える
4

findOneカーソル上で実行しないでください。カーソルは前のクエリの結果を指しています。iterator_to_arrayを使用して、見つかったすべてのレコードを含む配列を取得できます。または、最初に findOne() を使用できます-実際の行を返します

$collection = $db->members;
$query = array("email" => $email, "password" => $newpass);
$result = $collection->findOne($query);

if(!empty($result)){
    $_SESSION['email'] = $email;

    //having problems here
    $id = "" . $result['_id']; // cast to string, as its a MongoId object
    $_SESSION['id'] = $id;

    return true; 
}else 
    return false;
于 2012-08-24T13:55:56.393 に答える