Search code examples
phparraysbindparam

Insert a lot of record using single arguments and using bindParam


I have some method to insert some data into a database like this:

public function register($username, $email, $hashedPassword, $activationCode)
    {
        try {
            $conn = Database::getConnection();
            // Connect and create the PDO object
            $conn->exec('SET CHARACTER SET utf8');      // Sets encoding UTF-8
            // Define and prepare an INSERT statement
            $sql = 'INSERT INTO users (username, email, pass, reset_token, dateAdded )
            VALUES (:username, :pass, :email, :token, now())';
            $sqlprep = $conn->prepare($sql);

            // Adds value with bindParam
            $sqlprep->bindParam(':username', $username, PDO::PARAM_STR);
            $sqlprep->bindParam(':email', $email, PDO::PARAM_STR);
            $sqlprep->bindParam(':pass', $hashedPassword);
            $sqlprep->bindParam(':token', $activationCode);

            // If the query is successfully executed, output the value of the last insert id
            if ($sqlprep->execute()) {
                //echo 'Succesfully added the row with id='. $conn->lastInsertId();
                $this->result = true;
            }
            $conn = null;        // Disconnect

        } catch (PDOException $e) {
            include('../views/error.php');
            include('../views/admin/includes/footer.php');
            exit();
        }
    }

The problem is I think it's not a good method if I have so many arguments for my function to enter into a database. So is it any good way I can enter a lot of fields just by using 1 parameter but still using bindParam? Since I see a lot of examples is only using prepare without bindParam. I think I can use an array, but I don't know the proper way to do it. So I need some help how I can do it.


Solution

  • since you want keep your bindparam i suggest you use input like this:

    $input = array('username' => $username, 'activationHash' => $activationHash);

    and in your bindParam add a code like this:

    public function register($input){
    //code
    
    $sqlprep->bindParam(':username', $input['username'], PDO::PARAM_STR);
    
    //other
    }
    

    hope this will solve your problem