下面的代码没有在register.php文件中输入if($user)语句


The code below is not entering the if($user) statment in register.php file

我已经尝试了一些用于用户注册的代码。。每个gose精细代码都能工作,用户数据都存储在数据库中,但在register.php文件中,执行不会输入if($user)语句作为用户详细信息的$response。。!如果我错了,请帮我纠正,有些人。。。听gose/DB_Functions.php/

<?php
    class DB_Functions {
        private $db;
        // constructor
        function __construct() {
            try {
                $hostname = "localhost";
                $dbname = "miisky";
                $dbuser = "root";
                $dbpass = "";
                $this->db = new PDO("mysql:host=$hostname;dbname=$dbname", $dbuser, $dbpass);
            }
            catch(PDOException $e)
            {
                echo $e->getMessage();
            }
        }
        /**
          * Storing new user
          * returns user details
          */
        public function storeUser($fname, $lname, $email, $password, $mobile) {  
            try {
                $hash = md5($password);
                $sql = "INSERT INTO users(fname, lname, email, password, mobile, created_at) VALUES ('$fname', '$lname', '$email', '$hash', '$mobile', NOW())";
                $dbh = $this->db->prepare($sql);
                $dbh->execute();
                $result = $this->db->query($sql);
                if ($result) {
                    // get user details
                    $id = $this->db->lastInsertId(); //last inserted id
                    $sql = "SELECT * FROM db_name WHERE email = '$email'";
                    $result = $this->db->query($sql);
                    $no_of_rows = $result->fetchColumn();
                    // returns confirmation message if completed
                    if ($no_of_rows > 0) {
                        return "existsandcompleted";
                    }
                }
            }
            catch (Exception $e) {
                $error = 'Error accessing database: ' . $e->getMessage();
            }
        }
    }
    ?> 

而这里gose的/register.php/文件的主要问题是。。。!!

<?php
require_once 'DB_Functions.php';
$db = new DB_Functions();
// json response array
$response = array("error" => FALSE);
if (isset($_POST['fname']) && isset($_POST['lname']) && isset($_POST['email']) && isset($_POST['password']) && isset($_POST['mobile'])) {
    // receiving the post params
    $fname = $_POST['fname'];
    $lname = $_POST['lname'];
    $email = $_POST['email'];
    $password = $_POST['password'];
    $mobile = $_POST['mobile'];
    // create a new user
    $user = $db->storeUser($fname, $lname, $email, $password, $mobile);
    if ($user) {
        // user stored successfully
        $response["error"] = FALSE;
        $response["uid"] = $user["id"];
        $response["user"]["fname"] = $user["fname"];
        $response["user"]["lname"] = $user["lname"];
        $response["user"]["email"] = $user["email"];
        $response["user"]["created_at"] = $user["created_at"];
        $response["user"]["updated_at"] = $user["updated_at"];
        echo json_encode($response);
    } else {
        // user failed to store
        $response["error"] = TRUE;
        $response["error_msg"] = "Unknown error occurred in registration!";
        echo json_encode($response);
    }
} else {
    $response["error"] = TRUE;
    $response["error_msg"] = "Required parameters (fname, lname, email, password or mobile) is missing!";
    echo json_encode($response);
}
?>

问题:

用户数据存储在数据库中,但在register.php文件中,执行不会输入if($user)语句作为用户详细信息的$response

解决方案:

我很确定问题是因为下面这行,

$sql = "SELECT * FROM db_name WHERE email = '$email'";
                        ^ 

我想应该是的,

$sql = "SELECT * FROM users WHERE email = '$email'";
                        ^

此外,您的storeUser()方法应该是这样的:

// your code
public function storeUser($fname, $lname, $email, $password, $mobile) {  
    try {
        $hash = md5($password);
        $sql = "INSERT INTO users(fname, lname, email, password, mobile, created_at) VALUES ('$fname', '$lname', '$email', '$hash', '$mobile', NOW())";
        $dbh = $this->db->prepare($sql);
        if($dbh->execute()){
            // get user details
            $sql = "SELECT * FROM users WHERE email = '$email' LIMIT 1";
            $dbh = $this->db->prepare($sql);
            $result = $dbh->execute();
            $rows = $dbh->fetch();
            $n = count($rows);
            if($n){
                return $rows;
            }
        }
    }
    catch (Exception $e) {
        echo 'Error accessing database: ' . $e->getMessage();
    }
    return false;
}
// your code