【发布时间】:2019-11-10 03:34:33
【问题描述】:
我正在尝试使用 PHP 中的 PDO 创建用户注册系统,但无法连接到 MySQL 数据库。它总是说访问被拒绝,并且还有一些致命错误。
我尝试重置 MySQL 和互联网上的其他东西,但没有任何效果。
<?php
class userClass
{
/* User Login */
public function userLogin($usernameEmail, $password)
{
$db = getDB();
$hash_password = hash('sha256', $password);
$stmt = $db->prepare("SELECT uid FROM users WHERE (username=:usernameEmail or email=:usernameEmail) AND password=:hash_password");
$stmt->bindParam("usernameEmail", $usernameEmail, PDO::PARAM_STR);
$stmt->bindParam("hash_password", $hash_password, PDO::PARAM_STR);
$stmt->execute();
$count = $stmt->rowCount();
$data = $stmt->fetch(PDO::FETCH_OBJ);
$db = null;
if ($count)
{
$_SESSION['uid'] = $data->uid;
return true;
}
else
{
return false;
}
}
/* User Registration */
public function userRegistration($username, $password, $email, $name)
{
try{
$db = getDB();
$st = $db->prepare("SELECT uid FROM users WHERE username=:username OR email=:email");
$st->bindParam("username", $username,PDO::PARAM_STR);
$st->bindParam("email", $email,PDO::PARAM_STR);
$st->execute();
$count = $st->rowCount();
if ($count<1)
{
$stmt = $db->prepare("INSERT INTO users(username,password,email,name) VALUES (:username,:hash_password,:email,:name)");
$stmt->bindParam("username", $username,PDO::PARAM_STR);
$hash_password= hash('sha256', $password);
$stmt->bindParam("hash_password", $hash_password,PDO::PARAM_STR);
$stmt->bindParam("email", $email,PDO::PARAM_STR);
$stmt->bindParam("name", $name,PDO::PARAM_STR);
$stmt->execute();
$uid = $db->lastInsertId();
$db = null;
$_SESSION['uid'] = $uid;
return true;
}
else
{
$db = null;
return false;
}
}
catch(PDOException $e) {
echo '{"error":{"text":' . $e->getMessage() . '}}';
}
}
/* User Details */
public function userDetails($uid)
{
try{
$db = getDB();
$stmt = $db->prepare("SELECT email,username,name FROM users WHERE uid=:uid");
$stmt->bindParam("uid", $uid,PDO::PARAM_INT);
$stmt->execute();
$data = $stmt->fetch(PDO::FETCH_OBJ);
return $data;
}
catch(PDOException $e) {
echo '{"error":{"text":' . $e->getMessage() . '}}';
}
}
}
?>
这些是我遇到的错误。
连接失败:SQLSTATE[HY000] [1045] 用户 'root'@'localhost' 的访问被拒绝(使用密码:否)
和
致命错误:未捕获的错误:在 C:\xampp\htdocs\auctionsystem\class\userClass.php:33 调用成员函数 prepare() on null 堆栈跟踪:#0 C:\xampp\htdocs\auctionsystem\ index.php(40): userClass->userRegistration('anurag', 'anurag123', 'anurag@email.co...', 'Anurag Pal') #1 {main} 在 C:\xampp\htdocs\ auctionsystem\class\userClass.php 第 33 行
【问题讨论】:
-
看起来
getDB()返回了 null。您还没有显示getDB()函数,因此无法猜测您在该函数中做错了什么。根据错误,我猜在那个函数中,使用new PDO(...)连接到 MySQL 时您没有发送任何密码 -
在此处查看代码示例:php.net/manual/en/pdo.construct.php 以正确使用
new PDO(...)。