警告:mysqli_stmt :: bind_param():变量数与预准备语句5中的参数数量不匹配

时间:2016-03-30 22:21:32

标签: mysqli sql-update bindparam

我是编码的新手。我只是为我的旅行社创建新的会员数据,当这段代码运行不顺利时,我很困惑。当我第一次在mysqli中使用这个代码4行时运行良好,但是当我尝试复杂数据时,它没有运行。

这里是mysqli代码:

if(isset($_GET['id'])):
 if(isset($_POST['submit'])):
      $stmt = $mysqli->prepare("UPDATE jamaah SET berangkatbulan=?, berangkattahun=?,bulandaftar=?, tahundaftar=?, nomorktp=?, namapertama=?, 
                                                namakedua=?, namaketiga=?, namaayahkandung=?, tempattanggallahir=?, 
                                                umur=?, jeniskelamin=?, kewarganegaraan=?, alamatlengkap=?, rtrw=?, kelurahan=?, kecamatan=?, 
                                                kabupaten=?, provinsi=?, kodepos=?, nomortelepon=?,
                                                nomerhp=?, email=?, alamatjakarta=?, pendidikan=?, pekerjaan=?, pernahhaji=?, namamahram=?, hubunganmahram=?, 
                                                golongandarah=?, pilihpaket=? WHERE id=?");
      $stmt->bind_param('sssssssssssssssssssssssssssssss', $berangkatbulan, $berangkattahun, $bulandaftar, $tahundaftar, $nomorktp, $namapertama,$namakedua, $namaketiga, $namaayahkandung,
                                $tempattanggallahir, $umur, $jeniskelamin, $kewarganegaraan, $alamatlengkap, $rtrw, $kelurahan, $kecamatan, $kabupaten,$provinsi,$kodepos,
                                $nomortelepon,$nomerhp,$email, $alamatjakarta,$pendidikan, $pekerjaan, $pernahhaji, $namamahram,$hubunganmahram, $golongandarah, $pilihpaket);

        $berangkatbulan=$_POST['berangkatbulan'];
        $berangkattahun=$_POST['berangkattahun'];
        $bulandaftar=$_POST['bulandaftar'];
        $tahundaftar=$_POST['tahundaftar'];
        $nomorktp=$_POST['nomorktp'];
        $namapertama=$_POST['namapertama'];
        $namakedua=$_POST['namakedua'];
        $namaketiga=$_POST['namaketiga'];
        $namaayahkandung=$_POST['namaayahkandung'];
        $tempattanggallahir=$_POST['tempattanggallahir'];
        $umur=$_POST['umur'];
        $jeniskelamin=$_POST['jeniskelamin'];
        $kewarganegaraan=$_POST['kewarganegaraan'];
        $alamatlengkap=$_POST['alamatlengkap'];
        $rtrw=$_POST['rtrw'];
        $kelurahan=$_POST['kelurahan'];
        $kecamatan=$_POST['kecamatan'];
        $kabupaten=$_POST['kabupaten'];
        $provinsi=$_POST['provinsi'];
        $kodepos=$_POST['kodepos'];
        $nomortelepon = $_POST['nomortelepon'];
        $nomerhp=$_POST['nomerhp'];
        $email=$_POST['email'];
        $alamatjakarta=$_POST['alamatjakarta'];
        $pendidikan=$_POST['pendidikan'];
        $pekerjaan=$_POST['pekerjaan'];
        $pernahhaji=$_POST['pernahhaji'];
        $namamahram=$_POST['namamahram'];
        $hubunganmahram=$_POST['hubunganmahram'];
        $golongandarah=$_POST['golongandarah'];
        $pilihpaket=$_POST['pilihpaket'];
        $id = $_POST['id'];

      if($stmt->execute()):
           echo "<script>location.href='index.php'</script>";
      else:
           echo "<script>alert('".$stmt->error."')</script>";
      endif;
 endif;
 $res = $mysqli->query("SELECT * FROM jamaah WHERE id=".$_GET['id']);
 $row = $res->fetch_assoc();

当我点击更新mysqli消息时:

**Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in D:\xampp\htdocs\datarematour\admin\update.php on line 11**

这是我的示例php代码:

<label for="kewarganegaraan">Kewarganegaraan</label>
                            <select name="kewarganegaraan" class="form-control">
                            <option>-Pilih--</option>
                            <option value="<?php echo $row['kewarganegaraan'] ?>">Warga Negara Indonesia</option>
                            <option>Warga Negara Asing</option>
                            </select>

<div class="col-xs-6 col-md-4 form-group">
                            <label for="namapertama">Nama Pertama</label>
                            <input type="text" name="namapertama" value="<?php echo $row['namapertama'] ?>" class="form-control">
                        </div>

1 个答案:

答案 0 :(得分:0)

错误消息说明了一切:

  

警告:mysqli_stmt :: bind_param():变量数量与预备语句中的参数数量不匹配

您的查询本身包含32个问号,其中您的bind参数填充前31个参数但不填充最后一个参数,id

你必须在bind_param的字符串变量中添加i,然后在所有其他变量后面添加包含id值的变量