0

値を挿入しようとしているテーブルが 2 つあります。

表1:

CREATE TABLE `subusers` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`UserId` bigint(20) NOT NULL,
`BranchId` bigint(20) NOT NULL,
 `Username` varchar(30) NOT NULL,
`Password` char(64) NOT NULL,
`Salt` char(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB

表 2:

CREATE TABLE `branch` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`BusinessId` bigint(20) NOT NULL,
`UserId` bigint(20) NOT NULL,
`Name` varchar(30) NOT NULL,
`Info` varchar(300) NOT NULL,
PRIMARY KEY (`id`),
KEY `UserId` (`UserId`),
KEY `BusinessId` (`BusinessId`)
) ENGINE=InnoDB
ALTER TABLE `branch`
ADD CONSTRAINT `branch_ibfk_1` FOREIGN KEY (`UserId`) REFERENCES `subusers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

挿入クエリを使用してテーブルに値を追加しようとしていますが、列 subusers.branchid=branch.id AND branch.userid=subuser.id が必要です。ただし、クエリを介してデータを挿入すると、得られる結果は subuser.branchid=x-1 AND branch.userid=x-1 WHERE x は挿入された最新の行の ID です。

例: テーブル SubUSers

----------------------------------------
|id |UserId|BranchId|Username|Password |
-----------------------------------------
|22 |    2  |    0   | Add    |  Add   |<--1st insert
---------------------------------------
| 23|    2  |    0   | Add    |  Add   |<--2nd insert(Branch id should be 23)
---------------------------------------
| 24|    2  |    23  | DER    |  DER   |<--3rd insert(Branch id should be 24)
---------------------------------------

テーブル ブランチ

-----------------------------------
|id |BusinessId|UserId|Name|Info  |
-----------------------------------
|NIL|  NIL  |    NIL  | NIL | NIL | <---First Insert
-----------------------------------
|23 |    1  |    22   | Add |  Add| <---2nd Insert(UserId should be 23)
-----------------------------------
|24 |    1  |    22   | DER |  DER| <---3rd insert(UserId should be 24)
-----------------------------------

最初の挿入で、エラーが発生します:

 Cannot add or update a child row: a foreign key constraint fails (`kenced`.`branch`, CONSTRAINT `branch_ibfk_1` FOREIGN KEY (`UserId`) REFERENCES `subusers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

その後の試行では、挿入クエリは機能しますが、Subusers.branchid と branch.userid の値が間違っています。

My Code:

<?PHP
session_start();

if(@$_SESSION['Auth']!=="Yes" AND @$_SESSION['Type']!=="Admin")
{
echo"You are not authorised to view this page.Please click <a href='Login.php'>here</a> to login.";
exit();
}
?>

<?PHP

if(@$_POST['adduser']=="Submit")
{
include("cxn.inc");
$userid=$_SESSION['UserId'];
$username=$_POST['username'];
$username=mysqli_real_escape_string($cxn,$username);
$password=$_POST['password'];
$password=mysqli_real_escape_string($cxn,$password);
$name=$_POST['name'];
$name=mysqli_real_escape_string($cxn,$name);
$info=$_POST['info'];
$info=mysqli_real_escape_string($cxn,$info);
//gets business id
$getbId="SELECT id FROM Business Where Userid='$userid'";
$runbId=mysqli_query($cxn,$getbId) or die (mysqli_error($cxn));
$fetchBid=mysqli_fetch_assoc($runbId);
$bId=$fetchBid['id'];
//get subuserid
$getsid="SELECT id FROM SubUsers WHERE UserId='$userid'";
$runsid=mysqli_query($cxn,$getsid) or die (mysqli_error($cxn));
$fetchsid=mysqli_fetch_assoc($runsid);
$sid=$fetchsid['id'];
//get BranchId
$getbrid="SELECT id FROM Branch WHERE UserId='$sid'";
$runbrid=mysqli_query($cxn,$getbrid) or die (mysqli_error($cxn));
$fetchbrid=mysqli_fetch_assoc($runbrid);
$brid=$fetchbrid['id'];

//adds to table subuser
$adduser="INSERT INTO SubUsers (BranchId,UserId,Username,Password) VALUES ('$brid','$userid','$username','$password')";
$runuser=mysqli_query($cxn,$adduser) or die(mysqli_error($cxn));
//adds to table branch
$addbranch="INSERT INTO Branch (UserId,BusinessId,Name,Info) VALUES ('$sid','$bId','$name','$info')";
$runbranch=mysqli_query($cxn,$addbranch) or die (mysqli_error($cxn));
//gives success message upon successfully adding the user
$success="User Successfully added";
}


?>

<html>
<head><link rel="stylesheet" type="text/css" href="style.css" /></head>
<body>
<?PHP //include("AdminNav.php");?>
<form action="<?PHP echo $_SERVER['PHP_SELF']?>" name="AddUser" method="POST">
<table border="1">
<tr><td>Username</td><td><input type="text" name='username' size='38' maxlength='40'/></td></tr>
<tr><td>Password</td><td><input type="password" name="password" size="38" maxlength="64" /> </td></tr>
<tr><td>Branch Name</td><td><input type="text" name='name' size='38' maxlength='40'/></td></tr>
<tr><td>Branch Info</td><td><textarea name="info" rows="10" cols="30"></textarea></td>    </tr>
<tr>
<td><input type="Submit" name="adduser" value="Submit" /></td>
<td><?PHP if(isset($success)){echo"$success";} ?></td>
</tr>



</form>
</table>
</body>
</html>

現在の ID を取得するために、SELECT MAX(id) + 1 を使用することを検討していました。

私が読んだ LAST_INSERT_ID から作成できるものから、すべての値を一度に挿入するために 1 つのクエリのみを使用しているため、「最後のクエリ」がないため、機能しません。

誰かが親切に私を正しい方向に向けることができますか?

ありがとう

PS: PHP と MySQL を使用しています。

編集: クエリを分離して追加しようとしましたが、ID を最後に追加したままにします。ただし、エラーが発生しているため、これは機能しません。

Cannot add or update a child row: a foreign key constraint fails (`kenced`.`branch`, CONSTRAINT `branch_ibfk_1` FOREIGN KEY (`UserId`) REFERENCES `subusers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

私のコード:

mysqli_autocommit($cxn,"FALSE");
//adds to table subuser
$adduser="INSERT INTO SubUsers (UserId,Username,Password) VALUES ('$userid','$username','$password')";
//$runuser=mysqli_query($cxn,$adduser) or die(mysqli_error($cxn));
//adds to table branch
$addbranch="INSERT INTO Branch (BusinessId,Name,Info) VALUES ('$bId','$name','$info')";
//$runbranch=mysqli_query($cxn,$addbranch) or die (mysqli_error($cxn));

$runuser=mysqli_query($cxn,$adduser) or die(mysqli_error($cxn));
$sid=mysqli_insert_id($cxn);
$runbranch=mysqli_query($cxn,$addbranch) or die (mysqli_error($cxn));
$brid=mysqli_insert_id($cxn);
$addsid="INSERT INTO Branch(UserId) VALUES ('$sid')";
$runsid=mysqli_query($cxn,$addsid) or die (mysqli_error($cxn));
$addbrid="INSERT INTO SubUsers(BranchId) VALUES ('$brid')";
$runbrid=mysqli_query($cxn,$addbrid) or die (mysqli_error($cxn));
if($runsid and $runbrid)
mysqli_commit($cxn);
else
{
mysqli_rollback($cxn);
echo"ROLLBACKED";
}
//gives success message upon successfully adding the user
$success="User Successfully added";

私がやろうとしているのは、クエリとクエリの id を同時に挿入することです。ただし、mysqli_insert_query はエラー Cannot add or update a child row: a foreign key constraint fails ( kenced. branch, CONSTRAINT branch_ibfk_1FOREIGN KEY ( UserId) 参照subusers( id) 更新カスケードの削除カスケードについて)。

誰か私に手を貸してくれませんか?

とても有難い。

4

0 に答える 0