Php 在注册第二个查询后使用用户ID

Php 在注册第二个查询后使用用户ID,php,database,variables,mysqli,Php,Database,Variables,Mysqli,我创建了一个注册页面,但我想将用户信息发送到我创建的另一个db表。我正在创建的新添加的查询正在工作并将我想要的信息发送到db,但它没有将用户id发送到我的名为“payment_status”的新db表 我不确定我是否正确处理了这个问题。我正试图通过会话获取用户id,但我还没有登录,所以我不知道这是否是原因 有没有办法确保我的新查询在信息到达我的第一个名为“users”的db表后发送,然后从“users”表中获取用户id并将其放入我的表“payment\u status”中 在我的初始查询中,我没

我创建了一个注册页面,但我想将用户信息发送到我创建的另一个db表。我正在创建的新添加的查询正在工作并将我想要的信息发送到db,但它没有将用户id发送到我的名为“payment_status”的新db表

我不确定我是否正确处理了这个问题。我正试图通过会话获取用户id,但我还没有登录,所以我不知道这是否是原因

有没有办法确保我的新查询在信息到达我的第一个名为“users”的db表后发送,然后从“users”表中获取用户id并将其放入我的表“payment\u status”中

在我的初始查询中,我没有手动输入用户id。它是我的users表的主要自动递增“id”

我的初始创建查询:

if($validation->passed()) {
            $user = new User();

            $salt = Hash::salt(32);

            try {
                $user->create(array(
                    'firstname' => Input::get('firstname'),
                    'lastname' => Input::get('lastname'),
                    'email' => Input::get('email'),
                    'phone_number' => Input::get('phone_number'),
                    'username' => Input::get('username'),
                    'password' => Hash::make(Input::get('password'), $salt),
                    'salt' => $salt,
                    'joined' => date('Y-m-d H:i:s'),
                    'group' => 1
                ));
                $success = "You have successfully created an account. We will notify you once the account has been approved. Then you will be able to login.";
                echo $success;

            } catch(Exception $e) {
                die($e->getMessage());
            }
        } else {
            foreach($validation->errors() as $error) {
                $error;
            }
        }
    }
  } 
}
然后我的新查询:

if(isset($_POST['submit'])){
$id = ( isset( $_SESSION['id'] ) ? $_SESSION['id'] : "" );
$user_id = ( isset( $_SESSION['user'] ) ? $_SESSION['user'] : "" );
$firstname = Input::get('firstname');
$payment_name = "Owes";
$payment_id = 1;
$payment_amount = 0;
}


$con = mysqli_connect("localhost","root","","db");
/* check connection */
   if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
$stmt = $con->prepare("INSERT INTO payment_status (id, user_id, firstname, payment_name, payment_id, payment_amount) VALUES (?, ?, ?, ?, ?, ?)");
    if ( false===$stmt ) {
  // Check Errors for prepare
  die('prepare() failed: ' . htmlspecialchars($con->error));
}
$stmt->bind_param('iissii', $id, $user_id, $firstname, $payment_name, $payment_id, $payment_amount);
    if ( false===$stmt ) {
      // Check errors for binding parameters
      die('bind_param() failed: ' . htmlspecialchars($stmt->error));
    }
$stmt->execute();
    if ( false===$stmt ) {
      die('execute() failed: ' . htmlspecialchars($stmt->error));
    }
这是发送不正确的线路

$user_id = ( isset( $_SESSION['user'] ) ? $_SESSION['user'] : "" );
对于我注册的任何人,它都显示为0。如果有用户登录,这行代码就可以工作,因为它从users表中获取“id”行。因此,我试图获取的users表中的行是'id'

我这样做是否正确,或者我可以尝试什么

更新: 我试过这个

$stmt = $con->prepare("INSERT INTO payment_status (id, user_id, firstname, payment_name, payment_id, payment_amount) VALUES (?, ?, ?, ?, ?, ?)");
$user_id = mysqli_insert_id($con);

我注释掉了在此之前列出的用户id变量。

您需要使用上次插入id

$con=mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

mysqli_query($con,"INSERT INTO Persons (FirstName,LastName,Age) 
VALUES ('Glenn','Quagmire',33)");

// Print auto-generated id
echo "New record has id: " . mysqli_insert_id($con); 

mysqli_close($con);
From:

使用全局变量、会话或cookie存储最后一个插入id。 并在$stmt->execute之后使用最后一个insert id


试试这个代码。您正在执行提交请求之外的查询。

如何将此添加到第二个查询中?它会像这个$user\u id=mysqli\u insert\u id$con@Becky在插入查询后面加上$user\u id=mysqli\u insert\u id$con;这将返回您最后一次插入idI更新了我的问题与我所做的。我尝试将变量放在prepare insert之后。它在数据库中仍然返回0。不工作。我已经启动了一个会话,并且收到了一个警告,因此我在开始时删除了您的会话代码。我的付款状态数据库表中的“我的用户id”字段中的值仍然为0。请回显您的查询或检查付款状态表的数据类型。它与bind_参数中的相同吗?对于payment_状态,我将id设置为AI,primary设置为int 11。我的用户名也是int 11。你能在这里回显你的查询吗?我真的不知道如何回显查询结果。我以前从未做过。我只是搜索了一下,但不知道如何将它应用到我的代码中。
if(isset($_POST['submit'])){
$id = ( isset( $_SESSION['id'] ) ? $_SESSION['id'] : "" );
$user_id = $_SESSION['last'];
$firstname = Input::get('firstname');
$payment_name = "Owes";
$payment_id = 1;
$payment_amount = 0;

 $con = mysqli_connect("localhost","root","","db");
/* check connection */
   if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
$stmt = $con->prepare("INSERT INTO payment_status (id, user_id, firstname, payment_name, payment_id, payment_amount) VALUES (?, ?, ?, ?, ?, ?)");
    if ( false===$stmt ) {
  // Check Errors for prepare
  die('prepare() failed: ' . htmlspecialchars($con->error));
}
$stmt->bind_param('iissii', $id, $user_id, $firstname, $payment_name, $payment_id, $payment_amount);
    if ( false===$stmt ) {
      // Check errors for binding parameters
      die('bind_param() failed: ' . htmlspecialchars($stmt->error));
    }
$stmt->execute();
$_SESSION['last']=$stmt->insert_id;
    if ( false===$stmt ) {
      die('execute() failed: ' . htmlspecialchars($stmt->error));
    }



}