致命错误:未被捕获的错误:在布尔上调用成员函数RowCount()

时间:2019-06-24 13:49:53

标签: php mysql pdo

ı我的登录页面有问题。我收到此错误: 致命错误:未捕获错误:在C:\ xampp \ htdocs \ root \ login.php:43中的bool上调用成员函数RowCount()堆栈跟踪:#0 {main}抛出在C:\ xampp \ htdocs \ root \第43行的login.php

  <?php

                    if(isset($_POST['loginRequest'])){

                        $username = $_POST['email'];
                        $password = $_POST['password'];
                        $Sifreli = md5($password);

                        $query = $db->query("SELECT * FROM yonetim WHERE username = '{$username}'")->fetch(PDO::FETCH_ASSOC);
                        if($say = $query->RowCount()){
                        if ($say > 0){
                            $user = $query;
                            if($user['pass'] == $Sifreli){
                                $_SESSION['LOGGED'] = $user['username'];
                                if(isset($_SESSION['LOGGED'])){
                                    header('location:index.php');
                                }
                            } else {
                                echo "Kullanıcı adı veya şifre hatalı!";
                            }
                        } else {
                            echo 'Böyle bir kullanıcı bulunmamaktadır.';
                        }
                    }
                    }
                    ?>

1 个答案:

答案 0 :(得分:1)

在所有数据库API中,

rowCount()the most useless method。您的代码就是一个很好的例子。

您已经在$ query中获得了数据库结果,这意味着您不需要任何其他信息。只需摆脱rowCount行,并在以下情况下直接使用$query

$query = $db->query("SELECT * FROM yonetim WHERE ...")->fetch(PDO::FETCH_ASSOC);
if ($query){

两个强制性注释:

  1. 在任何情况下,您都不应直接在查询中放置数据变量。请改用占位符和准备好的查询。
  2. 使用MD5()并不比存储为纯文本更好。您必须改为使用password_verify()。

这是我为check the login and password using PDO编写的代码的典范示例:

$stmt = $pdo->prepare("SELECT * FROM yonetim WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();

if ($user && password_verify($password, $user['password']))
{
    $_SESSION['LOGGED'] = $user['username'];
    header('location:index.php');
    exit;
} else {
    echo "Kullanıcı adı veya şifre hatalı!";
}

请参阅-实际上比您当前的代码要简单得多!