首页 > 解决方案 > 连接到 MySQL 时这些错误是什么?

问题描述

我正在尝试在 PHP 中使用 PDO 制作用户注册系统,但无法连接到 MySQL 数据库。它总是说访问被拒绝,并且还有一些致命错误。

我尝试重置 MySQL 和 Internet 上可用的其他东西,但没有任何效果。

<?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() 堆栈跟踪:#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 行

标签: phpmysql

解决方案


连接失败:SQLSTATE[HY000] [1045] 用户'root'@'localhost'的访问被拒绝(使用密码:否)

这意味着您尝试连接到数据库,但无论出于何种原因拒绝连接

我不建议使用root,创建​​一个root以外的用户使用!

  • 尝试确保您的用户帐户未设置为仅允许本地连接
  • 设置您的用户帐户密码以匹配您提供的内容
  • 检查您的防火墙是否限制了您的连接
  • 确保您的 SQL 用户允许任何主机连接(由 % 标识)

推荐阅读