用户登录不工作,查询问题(PDO、MySQL、PHP)

用户登录不工作,查询问题(PDO、MySQL、PHP),php,mysql,pdo,Php,Mysql,Pdo,我对即将弃用的MySQL进行了疯狂的更改,我现在开始使用我的用户登录系统,在更改查询等之后,我无法登录该系统。 这是我到目前为止得到的 因为根本没有给出任何错误,所以它不会将我重定向到index.php login.php->登录后重定向到index.php 我当前的登录代码可能有什么问题 包括/db.php try { $db = new PDO("mysql:host=127.0.0.1; dbname=timeline_database", 'root', ''); } ca

我对即将弃用的MySQL进行了疯狂的更改,我现在开始使用我的用户登录系统,在更改查询等之后,我无法登录该系统。 这是我到目前为止得到的

因为根本没有给出任何错误,所以它不会将我重定向到index.php

login.php->登录后重定向到index.php

我当前的登录代码可能有什么问题

  • 包括/db.php

    try { 
        $db = new PDO("mysql:host=127.0.0.1; dbname=timeline_database", 'root', ''); 
    }
    catch( PDOException $e ) 
    { 
        echo $e->getMessage();
    }
    
  • 包括/Wall_Updates.php

    class Wall_Updates {
            private $db;
    
    public  function __construct ( $db ){
        $this->db = $db;
    }
    
    public function User_Login($_iUsername,$_iPassword) {
        $md5_password = md5($_iPassword);
    
        $sth = $this->db->prepare("SELECT _iD FROM users WHERE _iUsername = ? AND _iPassword = ? AND _iStatus = 1");
        $sth->execute(array($_iUsername, $md5_password));
    
        if ($sth->rowCount() == 1) {
            $row = $sth->fetch(PDO::FETCH_ASSOC);
            return $row['_iD'];
        } else {
            return false;
        }
    }
    
    public function User_Registration($_iPassword,$_iEmail,$_iNickname,$_iUsername) {
        $md5_password   = md5($_iPassword);
    
        $sth = $this->db->prepare("SELECT _iD FROM users WHERE _iEmail = ? ");
        $sth->execute(array($_iEmail));
    
        if ($sth->rowCount() == 0) {
            $sth1 = $db->prepare("INSERT INTO users (_iPassword,_iEmail,_iNickname,_iUsername) VALUES ( :_iPassword, :_iEmail, :_iNickname, :_iUsername ");
                $sth1->execute(array(':_iPassword' => $_iPassword,
                                     ':_iEmail'    => $_iEmail,
                                     ':_iNickname' => $_iNickname,
                                     ':_iUsername' => $_iUsername
                                    ));
    
            $sth3 = $db->prepare("SELECT _iD FROM users where _iUsername = ?");
                $sth3->execute(array($_iUsername));
    
            $sth2 = $db->prepare("INSERT INTO friends (friend_one,friend_two,role) VALUES ( :rowiD, :_rowiD, :me ");
                $sth2->execute(array(':rowiD' => $row['_iD'],
                                     ':rowiD' => $row['_iD'],
                                     ':me' => me 
                                    ));
    
                $row = $sth1->fetch(PDO::FETCH_ASSOC);
            return $row['_iD'] ;
        } else {
                return false;
        }
    }
    
    }

  • login.php

    include_once 'includes/db.php';
    include_once 'includes/Wall_Updates.php';
    error_reporting( E_ALL );
    
    session_start();
    if(!empty($_SESSION['_iD'])) {
        header("location:index.php");
    }
    
    $Wall = new Wall_Updates( $db );
    
    $login_error = '';
    if(!empty($_POST['_iUsername']) && !empty($_POST['_iPassword'])){
        if ( strlen($_POST['_iUsername'])>0 && strlen($_POST['_iPassword'])>0) {
        $login = $Wall->User_Login( $_POST['_iUsername'],$_POST['_iPassword'] );
            if( $login ){
                $_SESSION['_iD'] = $login;
                header("location: index.php");
            } else {
                $login_error="<div class='error' style='margin-top: -2px; margin-bottom: -8px;' ><span class='error'>Email or Password is invalid</span></div><br>";
            }
        }
    }
    
    
    html begins <?php echo $login_error; ?></div>
    <form method="post" action="" name="login">
        <input class="_iUsernameClass" type="text" placeholder="_iUsername" name="Username" id="login._iEmail">
        <input class="_iPasswordClass" type="password" placeholder="_iPassword"  name="Password" id="login._iPassword">
        <button class="primary" type="submit"></button>
    </form> html ends
    
    include_once'includes/db.php';
    include_once“includes/Wall_Updates.php”;
    错误报告(E_全部);
    会话_start();
    if(!empty($会话[''iD'])){
    标题(“location:index.php”);
    }
    $Wall=新墙更新($db);
    $login_error='';
    如果(!empty($\u POST[''u iUsername'])和&!empty($\u POST[''u iPassword'])){
    如果(strlen($邮政[''iUsername'])>0和&strlen($邮政[''iPassword'])>0){
    $login=$Wall->User\u login($\u POST[''iUsername'],$\u POST[''iPassword']);
    如果($login){
    $\会话[''iD']=$登录;
    标题(“location:index.php”);
    }否则{
    $login_error=“电子邮件或密码无效
    ”; } } } html开始 html结尾

    • 我看到的第一件事是你需要使用。尝试在查询生成中遵循此结构:

      $sth = $this->db->prepare("
        SELECT _iD
        FROM users
        WHERE _iUsername = :username
        AND _iPassword = :password");
      $sth->bindValue(":username", $_iUsername, PDO::PARAM_STR);
      $sth->bindValue(":password", $md5_password, PDO::PARAM_STR);
      $sth->execute();
      $result = $sth->fetch(PDO::FETCH_ASSOC); // returns id or false
      
      要记住的只是一个旁注:

      fetch(PDO::FETCH_ASSOC)
      
      仅返回一条记录,并且:

      fetchAll(PDO::FETCH_ASSOC)
      
      返回所有(多个)记录


      顺便说一句,由于时间限制,我没有检查您的所有代码。这只是我遇到的第一个问题。

      我看到的第一件事是您需要使用。尝试在查询生成中遵循此结构:

      $sth = $this->db->prepare("
        SELECT _iD
        FROM users
        WHERE _iUsername = :username
        AND _iPassword = :password");
      $sth->bindValue(":username", $_iUsername, PDO::PARAM_STR);
      $sth->bindValue(":password", $md5_password, PDO::PARAM_STR);
      $sth->execute();
      $result = $sth->fetch(PDO::FETCH_ASSOC); // returns id or false
      
      要记住的只是一个旁注:

      fetch(PDO::FETCH_ASSOC)
      
      仅返回一条记录,并且:

      fetchAll(PDO::FETCH_ASSOC)
      
      返回所有(多个)记录


      顺便说一句,由于时间限制,我没有检查您的所有代码。这只是我遇到的第一个问题。

      现在我了解了bindValue的用法,但何时才是使用问号(如“_iUsername=?”)的正确时间。不要将问号用作占位符。使用从bindValue()传递的冒号(:)和字符串组合。e、 g.
      :用户名
      ,或者您可以根据需要标记它。。。e、 g.
      :_iUsername
      $sth->bindValue中(“:_iUsername”,$_iUsername,PDO::PARAM_STR)遵循bindValue()文档页面上的示例:-可以使用数据类型参数(例如PDO::PARAM_STR、PDO::PARAM_INT、PDO::PARAM_BOOL)为参数绑定每个值的显式数据类型。请参阅PDO的预定义常量部分:现在我了解了bindValue的用法,但何时才是使用问号(如“_iUsername=?”)的正确时间。您不能将问号用作占位符。使用从bindValue()传递的冒号(:)和字符串组合。e、 g.
      :用户名
      ,或者您可以根据需要标记它。。。e、 g.
      :_iUsername
      $sth->bindValue中(“:_iUsername”,$_iUsername,PDO::PARAM_STR)遵循bindValue()文档页面上的示例:-可以使用数据类型参数(例如PDO::PARAM_STR、PDO::PARAM_INT、PDO::PARAM_BOOL)为参数绑定每个值的显式数据类型。请参见PDO的预定义常量部分: