2017-09-10 1 views
0

を使用して代わりに、1つのMySQLの2行を挿入:は、私がログインテーブルにログインデータを挿入しようとしている、と私はこのコードを使用していPDO

login.php

$verify = password_verify($password, $results['user_password']); 
if($verify){ 
    $session->logUser($results['user_id']); 
    header('Location: dashboard.php'); 
}else{ 
    //Error 
} 

そして、その後、session.phpに私はこれでセッションクラスを持っている:これは正常に動作している

public function logUser($userId){ 
    $_SESSION['userId'] = $userId; 

    $token = $this->createToken(); 
    $timestamp = time() + (86400 * 14); 

    $connection = new Connection; 
    $db = $connection->openConnection(); 

    $stmt = $db->query("INSERT INTO logins (login_token, login_userId, login_expires) VALUES ('$token', '$userId', '$timestamp')"); 
    $stmt->execute(); 
} 

、トークンはGENERされていますated、すべてのデータは正しいですが、データベースをチェックすると、2つのレコードが作成されます(同一のものですが、auto_increment IDが異なる)。

どうしてですか? ありがとうございます。

EDIT:私は永続的なログインを作成するattempにこのトークン事をやっている、私はクッキーを作成するためにまだ持っていますが、最初に私は、ログインデータがデータベースに正しく保存されていたかどうかをテストしたかったです。

+0

私はすべてのコードをチェックしましたが、本当に問題を見つけることができず、必要に応じてスクリーンショットを投稿します。 – nick

+0

は、ループ中であっても、セッションが開始されていなくてもよいし、ログイン時にリフレッシュリダイレクトであってもよい。 –

+0

'query()'はクエリを1回実行します。 'execute()'はそれを再び実行します。これを修正するときは、プリペアドステートメントを調べて、クエリを連結しないでください。それはPDOの目的を破るものです。 – jh1711

答えて

4

これを2回実行しています。 $ stmt-> execute();を削除します。

+1

うわー、これはうまくいった:|しかしどのように?私は常にクエリの後に実行を使用します。私はこれすべて間違ってこの時間をしてきましたか? – nick

+3

execute()は、実際にはここで使用しないでください。 – rtfm

+0

https://stackoverflow.com/questions/16381365/difference-between-pdo-query-and-pdo-exec – mwweb

関連する問題