mysqli 准备的问题变量数不匹配


mysqli prepared issue Number of variables doesn't match

我收到错误"变量数与预准备语句中的参数数不匹配"

 $stmt = $this->conn->prepare( "INSERT INTO  user 
            ( 
                st1, u1, e1, sa1, 
                h1, roles_id, name_titles_id, first_name, 
                last_name, phone,  mobile, address_road,
                address_area, address_region, post_code, city, 
                country_id, creation_date, activated_at, modified_date_time, 
                created_by, referred_by, gender, ad1, status 
            ) 
            VALUES 
            ( 
                ?, ?, ?, ?, 
                ?, ?, ?, ?, 
                ?, ?, ?, ?, 
                ?, ?, ?, ?, 
                ?, ?, ?, ?,
                ?, ?, ?, ?, ?
                 )" 
            ) 

        $stmt->bind_param('i',$st1);
        $stmt->bind_param('s',$u1);
        $stmt->bind_param('s',$e1);
        $stmt->bind_param('s',$sa1);
        $stmt->bind_param('s',$h1);
        $stmt->bind_param('i',$roles_id);
        $stmt->bind_param('i',$name_titles_id);
        $stmt->bind_param('s',$first_name);
        $stmt->bind_param('s',$last_name);
        $stmt->bind_param('s',$phone);
        $stmt->bind_param('s',$mobile);
        $stmt->bind_param('s',$address_road);
        $stmt->bind_param('s',$address_area);
        $stmt->bind_param('s',$address_region);
        $stmt->bind_param('s',$post_code);
        $stmt->bind_param('s',$city);
        $stmt->bind_param('i',$country_id);
        $stmt->bind_param('s',$creation_date);
        $stmt->bind_param('s',$activated_at);
        $stmt->bind_param('s',$modified_date_time);
        $stmt->bind_param('i',$created_by);
        $stmt->bind_param('i',$referred_by);
        $stmt->bind_param('s',$gender);
        $stmt->bind_param('s',$ad1);
        $stmt->bind_param('i',$status);

编辑:

只需做一个小测试,它就会确认,我们不能对 mysqli 使用多个bind_param。

不工作:

$stmt->bind_param('s',$a);
$stmt->bind_param('s',$b); 

工作:

$stmt->bind_param('ss',$a, $b);

希望它对将来的搜索有用。

你的问题很简单。您正在尝试手动执行该操作,而数据数量要求自动化过程。您必须创建一个程序来为您创建查询。

假设您已经有一个包含数据的数组。您所需要的只是定义要插入的字段列表

$fields  = "st1,u1,e1,sa1,h1,roles_id,name_titles_id,first_name,last_name,phone,";
$fields .= "mobile,address_road,address_area,address_region,post_code,city,";
$fields .= "country_id,creation_date,activated_at,modified_date_time,"; 
$fields .= "created_by,referred_by,gender,ad1,status" ;
$fields  = explode(",",$fields);

然后使用一些编程。幸运的是,它已经完成了:

include 'safemysql.class.php';
$db = new safeMysql();
$insert = $db->filterArray($_POST,$fields);
$db->query("INSERT INTO user SET ?u", $insert);

是的,你用错bind_param方式。正确的用法可以在手册页中看到。