Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询正在进行第二次尝试,但不是第一次_Php_Mysql - Fatal编程技术网

Php 查询正在进行第二次尝试,但不是第一次

Php 查询正在进行第二次尝试,但不是第一次,php,mysql,Php,Mysql,我想跟踪用户上次登录的时间,因此我在数据库中添加了一列,该列带有时间戳,可以在每次登录时更新,并在登录函数中添加了一个更新,但当我登录时,我收到一个错误,上面写着“SQLSTATE[HY000]:General error”,我的数据库没有任何变化,但如果我再次单击login,它会很好地将我登录,并根据我的需要更新表。 这是我的登录功能: public function login($email,$upass) { try { $stmt = $this->

我想跟踪用户上次登录的时间,因此我在数据库中添加了一列,该列带有时间戳,可以在每次登录时更新,并在登录函数中添加了一个更新,但当我登录时,我收到一个错误,上面写着“SQLSTATE[HY000]:General error”,我的数据库没有任何变化,但如果我再次单击login,它会很好地将我登录,并根据我的需要更新表。 这是我的登录功能:

public function login($email,$upass)
{
    try
    {
        $stmt = $this->conn->prepare("SELECT * FROM po_users WHERE userEmail=:email_id ");
        $stmt->execute(array(":email_id"=>$email));
        $userRow=$stmt->fetch(PDO::FETCH_ASSOC);

        if($stmt->rowCount() == 1)
        {
            if($userRow['userStatus']=="Y")
            {
                if($userRow['userPass']==md5($upass))
                {

                    $_SESSION['userSession'] = $userRow['userID'];
                    $stmt = $this->conn->prepare("UPDATE po_users SET lastLogIn = current_timestamp WHERE userEmail=:email_id");
                    $stmt->execute(array(":email_id"=>$email));
                    $userRow=$stmt->fetchAll(PDO::FETCH_ASSOC);
                    return true;
                }

有什么想法吗?

在更新之后,您实际上不能使用fetchAll。。。因此,请尝试以下方法:

public function login($email,$upass) {
    try {
        $select_user_stmt = $this->conn->prepare("SELECT * FROM po_users WHERE userEmail=:email_id ");
        $select_user_stmt->execute(array(":email_id"=>$email));
        $userRow = $select_user_stmt->fetch(PDO::FETCH_ASSOC);

        if($select_user_stmt->rowCount() == 1) {
            if($userRow['userStatus']=="Y") {
                if($userRow['userPass'] == md5($upass)) {
                    $_SESSION['userSession'] = $userRow['userID'];
                    $update_user_stmt = $this->conn->prepare("UPDATE po_users SET lastLogIn = current_timestamp WHERE userEmail=:email_id");
                    $update_user_stmt->execute(array(":email_id"=>$email));
                    $select_user_stmt->execute(array(":email_id"=>$email)); // do a search again here...
                    $userRow = $select_user_stmt->fetch(PDO::FETCH_ASSOC);
                    return true;
                }

希望这有帮助

打赌会话只有在设置完成后才会启动。关于如何设置并更新会话,有什么建议吗?检查会话是否先设置,然后运行查询-如果/elseIm仍在挣扎,我认为我考虑过了,你能给我一个带有代码的示例吗?非常感谢!非常感谢。是的,因为我认为我想得太多了,把它嵌套在另一个不必要的if语句中。