php
  • login
  • pdo
  • 2015-02-24 91 views 0 likes 
    0

    我在尝试将下面的语句转换为PDO.But,但我对用户名和电子邮件的绑定值感到困惑。PDO-用用户名或邮箱登录

    <?php 
    //$login is either username or email 
    $user = mysql_query("SELECT * FROM users WHERE (username = '$login' OR email = '$login') AND password = '$password'"); 
    ?> 
    

    上述声明的PDO版本我试过了。这里的$ login是用户名或电子邮件。

    <?php 
    //$login is either username or email 
    $query_usr = $this->db_connection->prepare("SELECT * FROM members WHERE username=:username OR email=:user_email) AND password = ':password'"); 
    $query_usr->bindValue(':username', $login, PDO::PARAM_STR); 
    $query_usr->bindValue(':user_email', $login, PDO::PARAM_STR); 
    $query_usr->bindValue(':password', $password, PDO::PARAM_STR); 
    $query_usr->execute(); 
    $query_usr_result_row = $query_usr->fetchObject(); 
    ?> 
    

    这是否有意义?

    回答

    0

    你有什么应该工作,但作为未成年人的优化:

    SELECT ... WHERE :login IN (username, email) AND password=:password 
    
    $query_usr->bindValue(':login', $login, PDO::PARAM_STR); 
    $query_usr->bindValue(':password', $password, PDO::PARAM_STR); 
    

    将正常工作。由于您正在对两个字段进行简单的OR相同值的比较,因此上述构造允许您使用单个占位符并将其与所有相关字段同时进行比较。而不是必须将相同的值绑定两次。

    +0

    谢谢您的回答。我应该只使用:登录吗?我在数据库中有两个单独的字段用于用户名和电子邮件。 – 2015-02-24 19:32:39

    +0

    他们在'IN'列表中。语法是非常通用的'WHERE值IN(field1,field2,... fieldN)'或'WHERE字段IN(value1,value2,... valueN)' – 2015-02-24 19:33:24

    +0

    对不起,我没有注意到那个。我的不好。谢谢再次。 – 2015-02-24 19:34:49

    相关问题