我有两个单独的表,每个表将分别输入表单数据到phpmyadmin DB中。
用户和家长分别
我使用的是过程式PHP和一个用于表单数据的预处理语句。我已经成功地将每个表单的数据插入到Db中,但是当涉及到将users表中的usersId插入到Parents表user_id(fk)中时,我在数据库中只收到NULL。然后,我可以从PHPmyadmin的下拉列表中使用适当的数据手动更新该列。
我可以将信息放入表中,这一点很好,但我希望将usersID自动插入到父表的user_Id列中。
下面是我使用的准备好的语句。
<?php
if (isset($_POST["submit"])) {
$mFname = $_POST["mFname"];
$mLname = $_POST["mLname"];
$mEmail = $_POST["mEmail"];
$mPhone = $_POST["mPhone"];
$fFname = $_POST["fFname"];
$fLname = $_POST["fLname"];
$fEmail = $_POST["fEmail"];
$fPhone = $_POST["fPhone"];
$addressL1 = $_POST["addressL1"];
$addressL2 = $_POST["addressL2"];
$city = $_POST["city"];
$stateAbbr = $_POST["stateAbbr"];
$zip = $_POST["zip"];
$user_Id = $_POST['user_Id'];
include_once 'dbh.inc.php';
include_once 'functions.inc.php';
$sql1 = "UPDATE parent INNER JOIN users ON users.usersId = parent.user_id SET parent.user_id = users.usersId";
if (mysqli_query($conn, $sql1)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . mysqli_error($conn);
}
$sql = "INSERT INTO parent (mFname, mLname, mEmail, mPhone, fFname, fLname, fEmail, fPhone, addressL1, addressL2, city, stateAbbr, zip, user_id) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
echo "SQL error";
} else {
mysqli_stmt_bind_param($stmt, "ssssssssssssis", $mFname, $mLname, $mEmail, $mPhone, $fFname, $fLname, $fEmail, $fPhone, $addressL1, $addressL2, $city, $stateAbbr, $zip, $user_id);
mysqli_stmt_execute($stmt);
}
header("Location: ../mf2.php?parentinfo=success");
}
字符串
Picture of the dropdown I can manually change in the DB to include usersId
上图显示数据进入表中,但是如图所示,user_Id列将显示NULL。我需要users表中的信息,特别是usersID列,以便在提交时自动显示在父表中user_Id列下。
请帮助我,并与我交谈,就好像我只是学习这一点,因为我是。你越详细越好。提前感谢大家的帮助。
我尝试使用一个内部连接,发现它说更新记录在一个点上是成功的,但当我检查Db时,我发现情况并非如此。
我尝试在准备好的语句中使用usersId会话变量,但没有成功。
我不知道我在这里做错了什么,但任何帮助都将不胜感激。
2条答案
按热度按时间vc9ivgsu1#
首先,作为PHP和DB的新手,我错误地认为创建外键约束会自动将数据从一个表推到另一个表,事实并非如此。
两个表之间的连接是为了数据完整性,而不是像我想的那样移动数据。Primary key - Foreign key约束链接表并构建一个关系,确保您无法破坏表之间的链接,但实际上不会将任何内容从一列移动或插入到另一列。
话虽如此,我运行了我的初始sql prepared语句,正如你在上面的代码中看到的那样,然后立即运行以下代码,该代码使用了两个单独表中的INNER JOIN,然后将parent.user_id的值设置为与users. usersId相同的值。
我相信有一个更好的方法来做到这一点,但鉴于我是新的所有这一切,我想分享的解决方案,似乎是工作形式我现在。
字符串
vvppvyoh2#
根据您的描述和代码,您似乎希望将数据插入到父表中,同时使用users表中相应的usersId更新同一表中的user_id列。问题似乎是父表中的user_id列在更新后仍为NULL。
要实现所需的行为,您应该首先将数据插入到父表中,然后使用相应的usersId更新user_id列。此外,您需要确保在mysqli_stmt_bind_param函数中具有正确的变量名。
下面是如何修改PHP代码来实现这一点:
字符串
说明:
1.在第一步中,使用预准备语句将数据插入到父表中,就像在代码中已经做过的那样。
1.在插入之后,使用mysqli_insert_id($conn)获取父表中最后一个插入行的自动生成的ID。
1.然后,使用检索到的lastInsertedId和user_Id(假设这是users表中的usersId),使用另一条准备好的语句更新父表中的user_id列。
通过执行这些步骤,您应该能够将数据插入到父表中,并将users表中正确的usersId自动添加到父表的user_id列中。