查询返回假,但它是真的

当$id是abc@ab 时,它返回true。这正如预期的那样!


但是当$id是1234567 时,它返回false。这并不 像预期的那样!


我的数据库:

+----+---------+---------+-----------+

| Id |  Email  |  Mobile |  Password |

+----+---------+---------+-----------+

| 15 | abc@a.b | 1234567 |$2y$10$ix..|

+----+---------+---------+-----------+

我的代码:

public function customer_login($id,$password)

    {

        try

        {

            $stmt = $this->conn->prepare("SELECT * FROM customer WHERE Email=:_email");

            $stmt->execute(array(":_email"=>$id));

            $userRow=$stmt->fetch(PDO::FETCH_ASSOC);

            $id = $userRow['Id'];


            $stmtM = $this->conn->prepare("SELECT * FROM customer WHERE Mobile=:_mobile");

            $stmtM->execute(array(":_mobile"=>$id));

            $userRowM=$stmtM->fetch(PDO::FETCH_ASSOC);

            $id = $userRowM['Id'];


                    if (password_verify($password, $userRow['Password']) || password_verify($password, $userRowM['Password'])) 

                    {


                        $_SESSION['customer'] = $id;

                        return true;


                        }

                    else

                    {

                        return false;

                    }

        }

        catch(PDOException $ex)

        {

            echo $ex->getMessage();

        }

    }

当$id是abc@ab 时,它返回true。这正如预期的那样!


但是当$id是1234567 时,它返回false。这并不 像预期的那样!


呼啦一阵风
浏览 145回答 2
2回答

回首忆惘然

   // Change this:       $stmt = $this->conn->prepare("SELECT * FROM customer WHERE Email=:_email");        $stmt->execute(array(":_email"=>$id));        $userRow=$stmt->fetch(PDO::FETCH_ASSOC);        $id = $userRow['Id'];        $stmtM = $this->conn->prepare("SELECT * FROM customer WHERE        Mobile=:_mobile");        $stmtM->execute(array(":_mobile"=>$id));        $userRowM=$stmtM->fetch(PDO::FETCH_ASSOC);        $id = $userRowM['Id'];        //to this :         $stmt = $this->conn->prepare("SELECT * FROM customer WHERE Email=:_email or         Mobile=:_mobile limit 0,1 ");        $stmt->execute(array(":_email"=>$id , ":_mobile"=>$id ));        $userRow=$stmt->fetch(PDO::FETCH_ASSOC);        $id = $userRow['Id'];

GCT1015

在下一行中,您将更改 $id 的值。$id 变量获取表的“Id”字段的值,并将其输入到基于手机号码的第二个查询中。这就是原因,您基于手机号码的查询不返回任何结果并返回 false。$id = $userRow['Id'];将上述分配给不同的变量并保持 $id 不变作为初始值。
打开App,查看更多内容
随时随地看视频慕课网APP