PHP&;SQL:在填写$\u请求时引发致命错误

PHP&;SQL:在填写$\u请求时引发致命错误,php,mysql,fatal-error,Php,Mysql,Fatal Error,我刚开始学习,但为什么当我不在URL中填写信息时,它会连接到数据库,但当我填写信息时,它会出现致命错误 我打字的时候 它抛出: Fatal error: Uncaught exception 'Exception' with message 'Failed to connect to database' in /home/torokage/public_html/php/classes/DB.class.php:22 Stack trace: #0 /home/torokage/public_

我刚开始学习,但为什么当我不在URL中填写信息时,它会连接到数据库,但当我填写信息时,它会出现致命错误

我打字的时候

它抛出:

Fatal error: Uncaught exception 'Exception' with message 'Failed to connect to database' in /home/torokage/public_html/php/classes/DB.class.php:22 Stack trace: #0 /home/torokage/public_html/php/signup.php(35): DB->connect() #1 {main} thrown in /home/torokage/public_html/php/classes/DB.class.php on line 22
但是当我打字的时候

它给出了我设置的错误:

{"status":"400","message":"Please fill in the missing information..."}
我对php和mysql没有太多的知识,只是想通过一些教程自己去弄清楚,但我无法让它继续工作

代码,signup.php:

<?php

require('classes/User.class.php');
require('classes/DB.class.php');
require('classes/Connection.class.php');


$firstname  = null;
$lastname   = null;
$username   = null;
$email      = null;
$password   = null;
$repassword = null;

if (empty($_REQUEST["firstname"])   ||
    empty($_REQUEST["lastname"])        ||
    empty($_REQUEST["username"])        ||
    empty($_REQUEST["email"])       ||
    empty($_REQUEST["password"]))
{
    $returnError["status"] = "400";
    $returnError["message"] = "Please fill in the missing information...";
    echo json_encode($returnError);
    return;
}

$firstname = htmlentities($_REQUEST["firstname"]);
$lastname = htmlentities($_REQUEST["lastname"]);
$username = htmlentities($_REQUEST["username"]);
$email = htmlentities($_REQUEST["email"]);
$password = md5(htmlentities($_REQUEST["password"]));


$DB = new DB(Connection::$db_host, Connection::$db_name, Connection::$db_user, Connection::$db_pass);
$DB->connect();

$checkUsername = $DB->checkIfUsernameExists($username);
if (!empty($checkUsername))
{
    $returnError["status"] = "400";
    $returnError["message"] = "That username has already been taken. Please try again...";
    echo json_encode($returnError);
    return;
}

$checkEmail = $DB->checkIfEmailExists($email);
if (!empty($checkEmail))
{
    $returnError["status"] = "400";
    $returnError["message"] = "That email has already been taken. Please try again...";
    echo json_encode($returnError);
    return;
}

$signUpUser = $DB->signUpUser($firstname, $lastname, $username, $email, $password);
if ($signUpUser)
{
    $userDetails = $DB->getUserDetails($username);
    $user["status"] = "200";
    $user["message"] = "Success! You have now been registered.";
    $user["ID"] = $userDetails["ID"];
    $user["firstname"] = $userDetails["firstname"];
    $user["lastname"] = $userDetails["lastname"];
    $user["username"] = $userDetails["username"];
    $user["email"] = $userDetails["email"];
}
else 
{
    $user["status"] = "400";
    $user["message"] = "Sorry, this account has already been taken. Please try again...";
}

$DB->disconnect();

echo json_encode($user);

?>

DB.class.php

<?php
class DB {
    protected $db_host = null;
    protected $db_name = null;
    protected $db_user = null;
    protected $db_pass = null;
    protected $db_conn = null;
    protected $db_resu = null;

    // Constructor
    function __construct($db_host, $db_name, $db_user, $db_pass) {
        $this->db_host = $db_host;
        $this->db_name = $db_name;
        $this->db_user = $db_user;
        $this->db_pass = $db_pass;
    }

    // Connect to database
    public function connect() {
        $this->db_conn = new MySQLi($this->db_host, $this->db_name, $this->db_user, $this->db_pass);
        if (mysqli_connect_errno())
            throw new Exception("Failed to connect to database");
        $this->db_conn->set_charset("utf8"); 
    }

    // Disconnect from database
    public function disconnect() {
        if ($this->db_conn != null)
            $this->db_conn->close();
    }

    // Check if username exists
    public function checkIfUsernameExists($username) {
        $result = mysql_query("SELECT USERNAME FROM USERS WHERE EMAIL = '$username'");
        if(mysql_num_rows($result) == 0){
            return false;
        } else {
            return true;
        }
    }

    // Check if email exists
    public function checkIfEmailExists($email) {
        $result = mysql_query("SELECT EMAIL FROM USERS WHERE EMAIL = '$email'");
        if(mysql_num_rows($result) == 0){
            return false;
        } else {
            return true;
        }
    }


    // Get user informationd
    public function getUserDetails($username) {
        $command = mysql_query("SELECT * FROM USERS WHERE USERNAME = '$username'");
        $value = array();
        $result = $this->db_conn->query($command);

        if ($result != null && (mysqli_num_rows($result) >= 1)) {
            $row = $result->fetch_array(MYSQLI_ASSOC);

            if (!empty($row)) {
                $value = $row;
            }
        }

        return $value;
    }

    // Sign up new user
    public function signUpUser($firstname, $lastname, $username, $email, $password) {
        $command = "INSERT INTO USERS SET FIRSTNAME=?, LASTNAME=?, USERNAME=?, EMAIL=?, PASSWORD=?";
        $sql = $this->db_conn->prepare($command);

        if (!$sql)
            throw new Exception($sql->error);

        $sql->bind_param("sssss", $firstname, $lastname, $username, $email, $password);
        $value = $sql->execute();

        return $value;  
    }
}

?>

当您没有使用任何值或参数时,它会显示您设置的错误,因为它无法通过您设置的验证步骤

但是,当您传递值或参数时,它会通过验证,并按照您的以下代码首先尝试连接数据库:
$DB=newdb(连接:$DB\u主机,连接:$DB\u名称,连接:$DB\u用户,连接:$DB\u通过);
$DB->connect()

但它引发了一个异常:
未能连接到数据库
,这意味着您的数据库连接凭据错误,因此无法连接到数据库

通过将
DB
类的
公共函数connect()
内部更改为以下内容,可以获得更友好的错误消息:

//连接到数据库
公共功能连接(){
试一试{
$this->db\u conn=new MySQLi($this->db\u host,$this->db\u name,$this->db\u user,$this->db\u pass);
$this->db_conn->set_字符集(“utf8”);
}捕获(例外$e){
echo“无法连接到数据库”;
echo“Error:”.$e->message;//在实时状态下删除。。。
}

}

您正在使用的是
mysqli
mysql
。您还可以选择参数化查询和非安全查询。使用所有参数化。