Php 对“我的代码”中出现错误的非对象调用成员函数fetchColumn()

Php 对“我的代码”中出现错误的非对象调用成员函数fetchColumn(),php,Php,我想创建一个登录系统 但不幸的是,出现了以下错误: 对非对象调用成员函数fetchColumn()时出错 请任何人都可以帮助我,因为这是在这个论坛的第一个帖子 <form action="login_controller.php" method="POST"> <span class="user_label">Username: </span> <input class="username" type="text" nam

我想创建一个登录系统 但不幸的是,出现了以下错误:

对非对象调用成员函数fetchColumn()时出错

请任何人都可以帮助我,因为这是在这个论坛的第一个帖子

<form action="login_controller.php" method="POST">
        <span class="user_label">Username: </span>
        <input class="username" type="text" name="username"><p>
        <span class="pass_label">Password: </span>
        <input class="password" type="password" name="password"><p>
        <input class="submit" type="submit" name="submit" value="Login">
</form>

用户名:

密码:


检查
$users\u count
包含的内容。它不是对象(可能为NULL或false,因为在数据库中找不到用户名)


您的错误意味着
NULL->fetchColumn()
检查
$users\u count
包含的内容。它不是对象(可能为NULL或false,因为在数据库中找不到用户名)


您的错误意味着
NULL->fetchColumn()

您的
$users\u count
可能是
NULL
,这就是您收到此错误的原因。

您的
$users\u count
可能是
NULL
,这就是您收到此错误的原因。

使用:

   $users_count = $pdo->query("SELECT COUNT(username) 
                                            FROM users
                                            WHERE username = {$username}");
        if($users_count){
            $count_all = $users_count->fetchColumn();
        }
    else{
        $count_all = null)
    }
要避免此类错误,请使用:

   $users_count = $pdo->query("SELECT COUNT(username) 
                                            FROM users
                                            WHERE username = {$username}");
        if($users_count){
            $count_all = $users_count->fetchColumn();
        }
    else{
        $count_all = null)
    }

要避免此类错误

您需要在SQL中添加引号,大约是
{$username}

SELECT COUNT(username)
FROM users
WHERE username = '{$username}'
因为您的SQL中有一个错误,所以您得到了一个错误的返回

您应该始终检查SQL错误。您可以按如下方式执行此操作:

$users_count = $pdo->query("SELECT COUNT(username) 
                            FROM users
                            WHERE username = '{$username}'");
if ($users_count == false) {
    print_r($pdo->errorInfo());
    exit();
}
当出现问题时,这将为您提供错误信息

最后,请注意,在SQL中注入字符串会使您容易受到SQL注入的攻击。相反,您应该执行以下操作和用户参数:

$stmt = $pdo->prepare("SELECT COUNT(username)
                       FROM users
                       WHERE username = ?");
if (!$stmt->execute($username)) {
    print_r($pdo->errorInfo());
    exit();
}
$count_all = $stmt->fetchColumn();

您需要在SQL中添加引号,大约是
{$username}

SELECT COUNT(username)
FROM users
WHERE username = '{$username}'
因为您的SQL中有一个错误,所以您得到了一个错误的返回

您应该始终检查SQL错误。您可以按如下方式执行此操作:

$users_count = $pdo->query("SELECT COUNT(username) 
                            FROM users
                            WHERE username = '{$username}'");
if ($users_count == false) {
    print_r($pdo->errorInfo());
    exit();
}
当出现问题时,这将为您提供错误信息

最后,请注意,在SQL中注入字符串会使您容易受到SQL注入的攻击。相反,您应该执行以下操作和用户参数:

$stmt = $pdo->prepare("SELECT COUNT(username)
                       FROM users
                       WHERE username = ?");
if (!$stmt->execute($username)) {
    print_r($pdo->errorInfo());
    exit();
}
$count_all = $stmt->fetchColumn();

正如其他用户所建议的,您的
$users\u count
变量可能被设置为Null,这意味着您的SQL查询中存在错误。要启用错误日志记录,可以将以下代码行添加到PDO连接:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
通过这种方式,您将能够准确地看到您得到的错误,然后进行相应的调试


希望这有帮助

正如其他用户所建议的,您的
$users\u count
变量可能被设置为Null,这意味着您的SQL查询中存在错误。要启用错误日志记录,可以将以下代码行添加到PDO连接:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
通过这种方式,您将能够准确地看到您得到的错误,然后进行相应的调试


希望这有帮助

SQL中的
{$username}
缺少引号。但最好使用预先准备好的查询

$stmt = $pdo->prepare("SELECT COUNT(username) FROM users
                       WHERE username = :username");
$stmt->bindParam(':username', $username);
if ($stmt->execute()) {
    $count_all = $stmt->fetchColumn();
} else {
    $count_all = null;
}

SQL中的
{$username}
缺少引号。但最好使用预先准备好的查询

$stmt = $pdo->prepare("SELECT COUNT(username) FROM users
                       WHERE username = :username");
$stmt->bindParam(':username', $username);
if ($stmt->execute()) {
    $count_all = $stmt->fetchColumn();
} else {
    $count_all = null;
}

使用准备好的语句,而不是将变量替换到SQL中。使用准备好的语句,而不是将变量替换到SQL中。感谢所有我将检查明天的hanks for all我将检查明天的