【发布时间】:2020-08-30 04:06:43
【问题描述】:
登录时,弹出此错误。
致命错误:未捕获的错误:在 C:\xampp\htdocs\twitter\core\classes\user.php:19 调用成员函数 prepare() on null 堆栈跟踪:#0 C:\xampp\htdocs\ twitter\includes\login.php(17): 用户->login('user@email.com', 'passwordofuser') #1 C:\xampp\htdocs\twitter\index.php(59): include('C :\xampp\htdocs...') #2 {main} 在第 19 行的 C:\xampp\htdocs\twitter\core\classes\user.php 中抛出
我是 PHP 的初学者,正在尝试通过将“输入”的电子邮件和密码连接到 SQL DATABASE 来验证它。如果数据库中没有电子邮件或密码,我想显示“错误”消息。
这是user.php。
错误在第 19 行。
$stmt = $this->pdo->prepare("SELECT `user_id` FROM `users` WHERE `email` = :email AND `password` = :password");
用户.php
<?php
class User
{
protected $pdo;
function _construct($pdo)
{
$this->pdo = $pdo;
}
public function checkInput($var)
{
$var = htmlspecialchars($var);
$var = trim($var);
$var = stripcslashes($var);
return $var;
}
public function login($email, $password)
{
$stmt = $this->pdo->prepare("SELECT `user_id` FROM `users` WHERE `email` = :email AND `password` = :password");
$stmt->bindParam(":email", $email, PDO::PARAM_STR);
$stmt->bindParam(":password",md5($password), PDO::PARAM_STR);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_OBJ);
$count = $stmt->rowCount();
if($count > 0)
{
$_SESSION['user_id'] = $user->user_id;
header('Location: home.php');
}
else
{
return false;
}
}
}
?>
现在,这是我的连接.php
<?php
$dsn = 'mysql:host=localhost; dbname=tweety';
$user = 'root';
$pass = '';
try
{
$pdo = new PDO($dsn, $user, $pass);
}
catch(PDOException $e)
{
echo 'Connnection error! ' . $e->getMessage();
}
?>
我知道以前有人问过这个问题,但我无法帮助自己找到解决方案。任何帮助将不胜感激。
我尝试了什么:
- 尝试检查 connection.php 中的拼写错误
- 尝试从 XAMPP 重新启动我的 SQL 服务器。
- 尝试引用其他"stackoverflow" questions.
【问题讨论】:
-
添加这一行 $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );在 $pdo 之后的 connection.php 中,然后查看
-
@ArifulIslam I did what you said 但仍然出现完全相同的错误,但我非常感谢您的建议兄弟。
-
现在也添加这一行 $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
-
你在哪里调用了你的用户类来访问方法?
-
@ArifulIslam Still the same error :(