Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in C:\User..\ on 148

﹥>﹥吖頭↗ 提交于 2020-01-30 13:25:09

问题


Hello i'm inserting a new column collegename, branch, and gender but suddenly it's giving me this error...

Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of 
parameters in prepared statement in C:\Users\Raj\PhpstormProjects\usercake\models
\class.newuser.php on line 148

What's that mean?

actually i was inserting a new column into my database college, branch, year, and gender everything goes well but when i register myself it's shows the message your Registration is successfully submitted but suddenly it shows this error message as wells as?? so where i'm supposed to be wrong please help?

here is my source code:

<?php
class User 
{
    public $user_active = 0;
    private $clean_email;
    public $status = false;
    private $clean_password;
    private $username;
    private $displayname;
    public $sql_failure = false;
    public $mail_failure = false;
    public $email_taken = false;
    public $username_taken = false;
    public $displayname_taken = false;
    public $activation_token = 0;
    public $success = NULL;

    function __construct($user,$display,$pass,$email)
    {
        //Used for display only
        $this->displayname = $display;

        //Sanitize
        $this->clean_email = sanitize($email);
        $this->clean_password = trim($pass);
        $this->username = sanitize($user);

        if(usernameExists($this->username))
        {
            $this->username_taken = true;
        }
        else if(displayNameExists($this->displayname))
        {
            $this->displayname_taken = true;
        }
        else if(emailExists($this->clean_email))
        {
            $this->email_taken = true;
        }
        else
        {
            //No problems have been found.
            $this->status = true;
        }
    }

    public function userCakeAddUser()
    {
        global $mysqli,$emailActivation,$websiteUrl,$db_table_prefix;

        //Prevent this function being called if there were construction errors
        if($this->status)
        {
            //Construct a secure hash for the plain text password
            $secure_pass = generateHash($this->clean_password);

            //Construct a unique activation token
            $this->activation_token = generateActivationToken();

            //Do we need to send out an activation email?
            if($emailActivation == "true")
            {
                //User must activate their account first
                $this->user_active = 0;

                $mail = new userCakeMail();

                //Build the activation message
                $activation_message = lang("ACCOUNT_ACTIVATION_MESSAGE",array($websiteUrl,$this->activation_token));

                //Define more if you want to build larger structures
                $hooks = array(
                    "searchStrs" => array("#ACTIVATION-MESSAGE","#ACTIVATION-KEY","#USERNAME#"),
                    "subjectStrs" => array($activation_message,$this->activation_token,$this->displayname)
                    );

                /* Build the template - Optional, you can just use the sendMail function 
                Instead to pass a message. */

                if(!$mail->newTemplateMsg("new-registration.txt",$hooks))
                {
                    $this->mail_failure = true;
                }
                else
                {
                    //Send the mail. Specify users email here and subject. 
                    //SendMail can have a third parementer for message if you do not wish to build a template.

                    if(!$mail->sendMail($this->clean_email,"New User"))
                    {
                        $this->mail_failure = true;
                    }
                }
                $this->success = lang("ACCOUNT_REGISTRATION_COMPLETE_TYPE2");
            }
            else
            {
                //Instant account activation
                $this->user_active = 1;
                $this->success = lang("ACCOUNT_REGISTRATION_COMPLETE_TYPE1");
            }   


            if(!$this->mail_failure)
            {
                //Insert the user into the database providing no errors have been found.
                $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."users (
                    user_name,
                    display_name,
                    password,
                    email,
                    college,
                    branch,
                    year,
                    gender,
                    activation_token,
                    last_activation_request,
                    lost_password_request, 
                    active,
                    title,
                    sign_up_stamp,
                    last_sign_in_stamp
                    )
                    VALUES (
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    '".time()."',
                    '0',
                    ?,
                    'New Member',
                    '".time()."',
                    '0'
                    )");

                $stmt->bind_param("sssssi", $this->username, $this->displayname, $secure_pass, $this->clean_email, $this->activation_token, $this->user_active);
                $stmt->execute();
                $inserted_id = $mysqli->insert_id;
                $stmt->close();

                //Insert default permission into matches table
                $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."user_permission_matches  (
                    user_id,
                    permission_id
                    )
                    VALUES (
                    ?,
                    '1'
                    )");
                $stmt->bind_param("s", $inserted_id);
                $stmt->execute();
                $stmt->close();
            }
        }
    }
}

?>

回答1:


You have 10 ? in your prepare statement but you passed 6 variables to it on $stmt->bind_param. You must pass exactly same variables as you have in statement. Your bind must be something like this:

$stmt->bind_param('isisississ', $int1, $str1, $int2, $str2, $int3, $str3, $str4, $int4, $str5, $str6);


来源:https://stackoverflow.com/questions/23056501/warning-mysqli-stmtbind-param-number-of-variables-doesnt-match-number-of

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!