【问题标题】:mysqli prepared issue Number of variables doesn't matchmysqli准备问题变量数不匹配
【发布时间】:2013-11-17 16:14:13
【问题描述】:

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

 $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);

希望它对以后的搜索有用。

【问题讨论】:

  • 谢谢,让我修一下。
  • @GordonLinoff 我更改了查询,但仍然出现相同的错误“变量数与准备语句中的参数数不匹配”
  • @Pekka웃 不,它不工作:(
  • @GordonLinoff 您链接到的手册页说语法没问题。我可以在哪里对您的评论投反对票?

标签: php mysql mysqli prepared-statement


【解决方案1】:

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

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

$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);

然后使用一些编程。幸运的是,it's already done

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

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

【讨论】:

  • 非常感谢您的回答,不幸的是,我想修复上面的查询,稍后我一定会研究 safemysql。目前我想知道当前查询的问题,因为我传递了 25 个值并且我数了 4-5 次。 :(
  • 有时这让我想知道为什么这么明显的事情没有被人看到。
  • 所以我们不能使用$stmt->bind_param('s',$a); $stmt->bind_param('i',$b); 我们只能使用$stmt->bind_param('ss',$a,$b); 用于mysqli
猜你喜欢
  • 2012-10-12
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-21
  • 2016-05-22
  • 1970-01-01
相关资源
最近更新 更多