Php 对“我的代码”中出现错误的非对象调用成员函数fetchColumn()
我想创建一个登录系统 但不幸的是,出现了以下错误: 对非对象调用成员函数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
<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我将检查明天的