0

私はしばらく PHP ループから外れていましたが、昨日戻ったとき、mysql と対話する多くの古い php 関数が段階的に廃止されていることにすぐに気付きました。これは問題ありませんが、新しい pdo コードに本当に苦労しています。ユーザーがログインしようとしているとしましょう。ユーザー名とパスワードの組み合わせが正しいかどうかを確認したいと思います。次に、彼のログイン数を更新し、最後のログインの日付/時刻を「previouslogin」に移動し、「lastlogin」を現在の日付/時刻で更新します。私が抱えている問題。変数でさえ、logincount をインクリメントできません。lastlogin を変数に割り当てることができないため、previouslogin を更新できません。私が間違っていることを教えてもらえますか?

    public function accountLogin()
{
    $sql = "SELECT UserID, UserName, PositionID, LoginCount, LastLogin
            FROM users
            WHERE UserName=:user
            AND Password=:pass
            LIMIT 1";
    try
    {
        $stmt = $this->_db->prepare($sql);
        $stmt->bindParam(':user', $_POST['username'], PDO::PARAM_STR);
        $stmt->bindParam(':pass', $_POST['password'], PDO::PARAM_STR);
        $stmt->execute();
        if($stmt->rowCount()==1)
        {
            $_SESSION['Username'] = htmlentities($_POST['username'], ENT_QUOTES);
            $_SESSION['LoggedIn'] = 1;
            $_SESSION['UserID']= $stmt->fetch()[0];
            $_SESSION['PositionID']= $stmt->fetch()[2];                                
            $logincount= $stmt->fetch()[3]; 
            $lastlogin= $stmt->fetch()[4];
            $sql = "UPDATE users SET LoginCount = ". $logincount + 1 . ", 
            PreviousLogin = " . $lastlogin ."
            WHERE UserID = " . $_SESSION['UserID'];

            $stmt = $this->_db->exec($sql);

            return TRUE;
4

1 に答える 1

1

MySQL フィールドを 1 ずつインクリメントするには、LoginCount = LoginCount + 1 を実行できます。

public function accountLogin()
{
    $sql = "SELECT UserID, UserName, PositionID, LoginCount, LastLogin
        FROM users
        WHERE UserName=:user
        AND Password=:pass
        LIMIT 1";
try
{
    $stmt = $this->_db->prepare($sql);
    $stmt->bindParam(':user', $_POST['username'], PDO::PARAM_STR);
    $stmt->bindParam(':pass', $_POST['password'], PDO::PARAM_STR);
    $stmt->execute();
    if($stmt->rowCount()==1)
    {
        $row = $stmt->fetch( PDO::FETCH_OB );
        $_SESSION['Username'] = htmlentities($row->UserName, ENT_QUOTES, "UTF-8");
        $_SESSION['LoggedIn'] = 1;
        $_SESSION['UserID']= $row->UserID;
        $_SESSION['PositionID']= $row->PositionID;                                
        $lastlogin= $row->LastLogin;
        $sql = "UPDATE users SET LoginCount = LoginCount + 1, 
        PreviousLogin = " . $lastlogin ."
        WHERE UserID = " . $_SESSION['UserID'];

        $stmt = $this->_db->exec($sql);

        return TRUE;
于 2013-01-12T21:54:37.653 に答える