Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 代码不会在else语句中显示错误消息_Php_Mysql_Pdo_Login - Fatal编程技术网

Php 代码不会在else语句中显示错误消息

Php 代码不会在else语句中显示错误消息,php,mysql,pdo,login,Php,Mysql,Pdo,Login,我的基本登录示例有点问题。当用户名和密码组合不正确时,else语句中的错误消息将不会显示。是因为while循环吗?我需要帮助 <?php $db = new PDO('mysql:host=127.0.0.1;dbname=project', 'root', ''); if(isset($_POST['username'], $_POST['password'])) { $username = $_POST['username']; $password = $_POST

我的基本登录示例有点问题。当用户名和密码组合不正确时,else语句中的错误消息将不会显示。是因为while循环吗?我需要帮助

<?php

$db = new PDO('mysql:host=127.0.0.1;dbname=project', 'root', '');

if(isset($_POST['username'], $_POST['password'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $result = $db->query("SELECT * FROM users WHERE username='$username' AND password='$password'");

    if(empty($username) || empty($password)) {
        echo 'Empty';
    }

    while($row = $result->fetch(PDO::FETCH_OBJ)) {
        if($username == $row->username && $password == $row->password) {
            echo 'Logged in';
        } else {
            echo 'Incorrect username and password combination';
        }
    }
}

当然不会显示。这是因为当您获取结果时,它不会返回任何行,或者只是返回空。也就是说,while循环中的代码不会执行

您还可以执行一个查询,根据用户名和密码条件统计返回的行数

$result = $db->query("SELECT COUNT(*) FROM users WHERE username='$username' AND password='$password'");

if (($row = $result->fetchColumn()) != 0) {
    // logged in
}
else {
    // incorrect username and password
}

当然不会显示。这是因为当您获取结果时,它不会返回任何行,或者只是返回空。也就是说,while循环中的代码不会执行

您还可以执行一个查询,根据用户名和密码条件统计返回的行数

$result = $db->query("SELECT COUNT(*) FROM users WHERE username='$username' AND password='$password'");

if (($row = $result->fetchColumn()) != 0) {
    // logged in
}
else {
    // incorrect username and password
}

select语句仅在用户名和密码都正确时返回值。因此,如果它不正确,循环中的代码将不会执行

尝试从sql语句中删除密码检查:

"SELECT * FROM users WHERE username='$username';"

select语句仅在用户名和密码都正确时返回值。因此,如果它不正确,循环中的代码将不会执行

尝试从sql语句中删除密码检查:

"SELECT * FROM users WHERE username='$username';"

不需要重新检查查询结果。因为,若查询成功,则fetch函数将返回结果行,否则返回false

更改以下代码


注意:由于您的登录目的,用户名字段应为唯一列。

无需重新检查查询结果。因为,若查询成功,则fetch函数将返回结果行,否则返回false

更改以下代码


注意:由于您的登录目的,用户名字段应该是唯一的列。

当您找到此问题的答案时,我建议您仔细阅读,因为屏幕上不会显示任何内容,或者显示的是登录的回显?@Epodax如果组合正确,则显示登录。如果不匹配,则不显示任何内容。如果$username或$passwords与任何列都不匹配,则查询将返回0。如果在while条件中使用此0,则它将评估为false,并且不会发生循环。改为使用if语句。当您找到这个问题的答案时,我建议您仔细阅读,在屏幕上不会显示为in nothing,还是显示登录的回显?@Epodax如果组合正确,则显示Logged in。如果不匹配,则不显示任何内容。如果$username或$passwords与任何列都不匹配,则查询将返回0。如果在while条件中使用此0,则它将评估为false,并且不会发生循环。改为使用if语句。如果只想选择符合条件的行数/行数,则使用fetchColumn。如果只想选择符合条件的行数/行数,则使用fetchColumn。