mysqli_stmt_bind_param():变量的数量与绑定参数中准备好的语句中的参数数量不匹配

Posted

技术标签:

【中文标题】mysqli_stmt_bind_param():变量的数量与绑定参数中准备好的语句中的参数数量不匹配【英文标题】:mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters in prepared statement in bind param 【发布时间】:2021-06-08 12:52:25 【问题描述】:

我收到此错误。我想注册到页面。 。 `

<?php       if(isset($_POST['submit']))  // Was the form submitted?
        $link = mysqli_connect("localhost", "root", "", "databaseInitialization") or die ("Connection Error " . mysqli_error($link));
            $sql = "INSERT INTO user(first_name, last_name, email, password, bio, location, industry,salt) VALUES(?,?,?,?,?,?,?,?)"; 
            if ($stmt = mysqli_prepare($link, $sql)) 
                $fname = $_POST['fname'];
                $lname = $_POST['lname'];
                $email = $_POST['email'];
                $_SESSION['email'] = $email;
                $bio = $_POST['bio'];

                $location = $_POST['location'];
                $industry = $_POST['industry'];
                        $salt = mt_rand();
                $password = password_hash($salt.$_POST['pass'], PASSWORD_BCRYPT)  or die("bind param");
                //echo "before bind";
                mysqli_stmt_bind_param($stmt, 'sssssss', $fname, $lname, $password, $email, $bio, $location, $industry) or die("bind param");
                //echo "after bind";


    if(mysqli_stmt_execute($stmt)) 
                          echo "<h4><b><center>Success</center></b></h4>";
            //this redirects to user.php - but still need to log in 
            header('location: user.php');
                 else 
                    echo "<h4><b><center>Failed</center></b></h4>";
                    printf("<b><center>Error: %s</center></b>.\n", mysqli_stmt_error($stmt));
                
            $result = mysqli_stmt_get_result($stmt);
            
         
        else  ?>`

【问题讨论】:

说什么?这不是你的页面,你想让我们告诉你问题是什么? 您的查询中有 8 个占位符,但只绑定了 7 个。 错误消息告诉你出了什么问题:你有 8 个占位符(准备好的语句中的?)和绑定mysql_bind_param(...) 的7 个变量。数一数。 :-) 【参考方案1】:

在您的插入中,有 8 列,只有 7 个绑定

                     1           2        3      4        5      6
INSERT INTO user(first_name, last_name, email, password, bio, location, 
   7       8
industry,salt)
VALUES(?,?,?,?,?,?,?,?)
       1 2 3 4 5 6 7 8

绑定,少了一个,大概是salt

                               1234567 
mysqli_stmt_bind_param($stmt, 'sssssss',
   1      2        3         4       5      6          7
$fname, $lname, $password, $email, $bio, $location, $industry) or die("bind param");

s、列和变量的数量必须相同,在本例中为 8。要修复,只需在 bind_param() 处添加一个 s$salt,如下所示:

mysqli_stmt_bind_param($stmt, 'ssssssss', $fname, $lname, $password, $email, $bio, $location, $industry, $salt) or die("bind param");

【讨论】:

我要加一个招式?? @user6251750 你需要加一个s$salts的个数,列和变量必须相同,本例为8个。 @user6251750 正如 rray 所说的 meta.stackexchange.com/questions/5234/…

以上是关于mysqli_stmt_bind_param():变量的数量与绑定参数中准备好的语句中的参数数量不匹配的主要内容,如果未能解决你的问题,请参考以下文章

警告:mysqli_stmt_bind_param()期望参数1是mysqli_stmt,给定布尔值? [重复]

将 mysql 更改为 mysqli 及其 xampp 版本

运行准备好的语句 (MySQL/PHP)

我可以在准备好的语句中参数化表名吗?

我可以在准备好的语句中参数化表名吗?