PDOStatement-> execute()User-> userRegistration(Array)[关闭]

<?php

include "session.php";
include "Database.php";

class User{

    private $db; 
    public function __construct(){
        $this->db = new Database();
    }

    public function userRegistration($data){
        $name  = $data['name'];
        $usnm  = $data['usnm'];
        $email = $data['email'];
        $pass  = md5($data['pass']);

        $chk_email = $this->emailcheck($email);

        if($name == "" OR $usnm == "" OR $email == "" OR $pass == ""){
                $msg = "<div class='alert alert-denger'><strong>Error !</strong>Field must not be empty</div>";

                return $msg;
        }
        if(strlen($usnm) < 3){
            $msg = "<div class='alert alert-denger'>username too short!</div>";

                return $msg;
        }
        elseif(preg_match('/[^a-z0-9_-]+/i' ,$usnm)){

            $msg = "<div class='alert alert-denger'>Username must in alphanumeric!</div>";

                return $msg;
        }
        if(filter_var($email, FILTER_VALIDATE_EMAIL) === false){
            $msg = "<div class='alert alert-denger'>Invalid Email Id!</div>";

                return $msg;
        }
        if($chk_email == true){
            $msg = "<div class='alert alert-denger'>Email Id Already Exist!</div>";

                return $msg;
        }
        $sql = "insert into register (name,user_name,email_id,password) values (:name, :username, :email, :password)";
        $query = $this->db->pdo->prepare($sql);
        $query->bindValue(':name',$name);
        $query->bindValue(':user_name',$usnm);
        $query->bindValue(':email_id',$email);
        $query->bindValue(':password',$pass);
        $result = $query->execute();
        if($result){

            $msg = "<div class='alert alert-success'><strong>Success</strong>You have been Registered</div>";

                return $msg;
        }else{

            $msg = "<div class='alert alert-denger'><strong>Error !</strong>Sorry, there has been problem inserting your details!</div>";

                return $msg;

        }
    }
    public function emailcheck($email){
        $sql = "select email_id from register email_id = :email";
        $query = $this->db->pdo->prepare($sql);
        $query->bindparam(':email_id', $email);
        $query->execute();
        if($query->rowCount() > 0){
            return true;
        }else{
            return false;
        }
    }
}

?>

and i got this error

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in C:\xampp\htdocs\test\lib\user.php:71 Stack trace: #0 C:\xampp\htdocs\test\lib\user.php(71): PDOStatement->execute() #1 C:\xampp\htdocs\test\lib\user.php(19): User->emailcheck('jpjadeja24@gmai...') #2 C:\xampp\htdocs\testegister.php(7): User->userRegistration(Array) #3 {main} thrown in C:\xampp\htdocs\test\lib\user.php on line 71

The parameter names used in the bindValue() call have to match those used in the query

So

    $sql = "insert into register 
                    (name,user_name,email_id,password) 
             values (:name, :username, :email, :password)";
    $query = $this->db->pdo->prepare($sql);
    $query->bindValue(':name',$name);
    $query->bindValue(':user_name',$usnm);

    // The FIX
    //$query->bindValue(':email_id',$email);
    $query->bindValue(':email',$email);

    $query->bindValue(':password',$pass);
    $result = $query->execute();

Alternatively, change the query param

    $sql = "insert into register 
                    (name,user_name,email_id,password) 
             values (:name, :username, :email_id, :password)";
    //                                 ^^^^^^^^^

    $query = $this->db->pdo->prepare($sql);
    $query->bindValue(':name',$name);
    $query->bindValue(':user_name',$usnm);
    $query->bindValue(':email_id',$email);
    $query->bindValue(':password',$pass);
    $result = $query->execute();

Also this will be your next problem, a missing WHERE and you have made the same mistake with the binding

public function emailcheck($email){
    $sql = "select email_id from register WHERE email_id = :email";
    //                                    ^^^^^
    $query = $this->db->pdo->prepare($sql);

    // AND THE SAME FIX REQUIRED HERE

    //$query->bindparam(':email_id', $email);
    $query->bindValue(':email',$email);
    $query->execute();

My be because of the typo while assigning the values to the parameters. This should work. Modify your query on line #47

$sql = "insert into register (name,user_name,email_id,password) values (:name, :user_name, :email_id, :password)";