Php Insert语句将列留空并导致错误

Php Insert语句将列留空并导致错误,php,mysqli,Php,Mysqli,我正在尝试使用PHP实现一个基本的用户注册系统。当我有一个空白用户表时,我可以注册一个用户。注册后,密码字段将正确存储为散列,但SQL表中用户名列为空。在此插入之后,即使用户名和密码完全不同,我也无法再插入任何行,直到删除现有的单行 我已经尝试删除了所有的验证,所以在我弄清楚到底发生了什么之前,我现在要解决的代码更少 下面是我执行插入的函数 function registerUser($username, $password) { $db = $this-

我正在尝试使用PHP实现一个基本的用户注册系统。当我有一个空白用户表时,我可以注册一个用户。注册后,密码字段将正确存储为散列,但SQL表中用户名列为空。在此插入之后,即使用户名和密码完全不同,我也无法再插入任何行,直到删除现有的单行

我已经尝试删除了所有的验证,所以在我弄清楚到底发生了什么之前,我现在要解决的代码更少

下面是我执行插入的函数

        function registerUser($username, $password) {
            $db = $this->getDbConnection();
                if (!is_null($db)) {
                    $query = "INSERT INTO users (username, password) VALUES (?, ?)";
                    if($stmt = mysqli_prepare($db, $query)){
                    // Bind variables to the prepared statement as parameters
                    mysqli_stmt_bind_param($stmt, "ss", $param_username, $param_password);

                    // Set parameters
                    $param_username = $username;
                    $param_password = password_hash($password, PASSWORD_DEFAULT); // Creates a password hash

                    // Attempt to execute the prepared statement
                    if (mysqli_stmt_execute($stmt)) {
                        // Redirect to login page
                        header("location: /index.php");
                        exit();
                    } else {
                        echo "Something went wrong. Please try again later.";
                    }                

                    }
                // Close statement
                mysqli_stmt_close($stmt);
            }
            mysqli_close($db);
        }
以下是我创建用户表的方式:

CREATE TABLE users (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
最后,这是我的HTML表单:

<div class="vertical-center">
    <div class="container roundedEdges mainContent divPadding10">
        <h2 class="textCenter">Sign Up</h2>
        <br>

      <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
          <div class="form-group <?php echo (!empty($username_err)) ? 'has-error' : ''; ?>">
              <label>Username</label>
              <input type="text" name="username" class="form-control" value="<?php echo $username; ?>">
              <span class="help-block"><?php echo $username_err; ?></span>
          </div>    
          <div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>">
              <label>Password</label>
              <input type="password" name="password" class="form-control" value="<?php echo $password; ?>">
              <span class="help-block"><?php echo $password_err; ?></span>
          </div>
          <div class="form-group <?php echo (!empty($confirm_password_err)) ? 'has-error' : ''; ?>">
              <label>Confirm Password</label>
              <input type="password" name="confirm_password" class="form-control" value="<?php echo $confirm_password; ?>">
              <span class="help-block"><?php echo $confirm_password_err; ?></span>
          </div>
          <div class="form-group">
              <input type="submit" class="btn btn-success" value="Submit">
              <input type="reset" class="btn btn-danger" value="Reset">
          </div>
          <p>Already have an account? <a href="login.php">Login here</a>.</p>
      </form>

    </div>
</div>

用户名字段是唯一的,所以每次插入数据库之前,请确保检查具有请求用户名的数据是否存在,然后执行插入查询

看来我在这里找到了错误。我已经注释掉了我用来验证输入的代码,因为我认为问题出在其他地方,但我想我应该更加关注我的验证逻辑。我打算从POST数组中读取值,验证它们,然后在验证函数中处理$username和$password变量的赋值


这是我忘记的最后一步。

转储您的参数。他们展示了什么?在哪里调用注册函数?当然,参数为空。因此,用户也用空值插入您的密码,但您正在使用它,以便它获得一个新值。第二次尝试时,由于allready有一个空用户,它会给您一个错误,这是一个唯一的列,正如@Script47所说,您从未调用该函数……在我们可以看到的代码中。我只是编辑了我的帖子,以显示调用该函数的位置。我无法使用var_dump获取有关我的参数的信息,但我对该过程不太熟悉。问题的关键是,为什么字段显示为空。可能在将用户名传递给函数时,它被设置为空。在将其传递给函数之前,请尝试回显用户用户名
require($_SERVER['DOCUMENT_ROOT'].'/DAL/queries.php');
$queryRunner = new QueryRunner;
$queryRunner->registerUser($username, $password);