Php 如何插入到两个单独的表中并使用相同的ID链接它们?
我有两个表(客户表和药物表),我创建了一个表单,将用户输入的信息插入这些表中。一个客户可能有很多以前的药物使用(简称为药物),因此我为多次药物使用制作了一个单独的表格,现在我需要将它们链接起来。客户端id是自动递增的,药物id也是自动递增的,但是我的药物客户端id不是,我需要它与客户端id相同(否则它们不会链接)。我不太确定该怎么做,所以如果有人能帮我,我将不胜感激Php 如何插入到两个单独的表中并使用相同的ID链接它们?,php,html,mysql,Php,Html,Mysql,我有两个表(客户表和药物表),我创建了一个表单,将用户输入的信息插入这些表中。一个客户可能有很多以前的药物使用(简称为药物),因此我为多次药物使用制作了一个单独的表格,现在我需要将它们链接起来。客户端id是自动递增的,药物id也是自动递增的,但是我的药物客户端id不是,我需要它与客户端id相同(否则它们不会链接)。我不太确定该怎么做,所以如果有人能帮我,我将不胜感激 我无法让它在一个php文件上工作,所以我不得不将客户机和药物插入语句放在两个不同的文件中;所以如果你能帮我把它们也变成一个,我会更
我无法让它在一个php文件上工作,所以我不得不将客户机和药物插入语句放在两个不同的文件中;所以如果你能帮我把它们也变成一个,我会更加感激的哈哈。
请查看下面的代码并帮助我,非常感谢
<html>
<head>
<title> Access Community Trust </title>
</head>
<body>
<form action="addclientwo.html" method="post">
First name: <input type="text" name="first_name">
<br>
Drug use: <input type="text" name="drug1">
<input type="text" name="drug2">
<input type="text" name="drug3">
<input type="submit" value="Submit">
</form>
</body>
</html>
<?php
Require("dbconnect.php");
//establishes connected to database
$first_name = $_POST['first_name'];
$stmt = $dbh->prepare("INSERT INTO client (first_name) VALUES (:first_name)");
$stmt->bindParam(':first_name', $first_name);
$stmt->execute();
?>
<?php
Require("dbconnect.php");
$drug1 = $_POST['drug1'];
$drug2 = $_POST['drug2'];
$drug3 = $_POST['drug3'];
$stmt = $dbh->prepare("INSERT INTO drug (drug1, drug2, drug3) VALUES (:drug1, :drug2, :drug3)");
$stmt->bindParam(':drug1', $drug1);
$stmt->bindParam(':drug2', $drug2);
$stmt->bindParam(':drug3', $drug3);
$stmt->execute();
?>
访问社区信任
名字:
药物使用:
顺便说一句,我是为一家无家可归的旅馆制作的,所以这些客户中的一些人可能在过去吸毒(他们需要记录在案);我不是在做什么毒品经销商哈哈看起来你没有把毒品客户id和毒品1,2,3一起放在第二张桌子上 因此,在第一次插入客户机表之后,您必须检索此客户机的客户机id,例如$drug\u client\u id。 然后,您必须使用此值$druge\u client\u id来设置secoind语句(当然,在检查第一次保存是否成功后) 大概是这样的:
$stmt = $dbh->prepare("INSERT INTO drug (drug1, drug2, drug3, drug_client_id) VALUES (:drug1, :drug2, :drug3, :drug_client_id)");
$stmt->bindParam(':drug1', $drug1);
$stmt->bindParam(':drug2', $drug2);
$stmt->bindParam(':drug3', $drug3);
$stmt->bindParam(':drug_client_id', $drug_client_id);
$stmt->execute();
$first_name = $_POST['first_name'];
$stmt = $dbh->prepare("INSERT INTO client (first_name) VALUES (:first_name)");
$stmt->bindParam(':first_name', $first_name);
$stmt->execute();
$drug_client_id = $dbh->lastInsertId();
$stmt = $dbh->prepare("INSERT INTO drug (drug1, drug2, drug3, drug_client_id) VALUES (:drug1, :drug2, :drug3, :drug_client_id)");
$stmt->bindParam(':drug1', $drug1);
$stmt->bindParam(':drug2', $drug2);
$stmt->bindParam(':drug3', $drug3);
$stmt->bindParam(':drug_client_id', $drug_client_id);
$stmt->execute();
如果希望这有帮助。当您在数据库中插入某些内容时,您可以得到如下id:
$lastId = $dbh->lastInsertId();
所以你可以这样做:
$stmt = $dbh->prepare("INSERT INTO drug (drug1, drug2, drug3, drug_client_id) VALUES (:drug1, :drug2, :drug3, :drug_client_id)");
$stmt->bindParam(':drug1', $drug1);
$stmt->bindParam(':drug2', $drug2);
$stmt->bindParam(':drug3', $drug3);
$stmt->bindParam(':drug_client_id', $drug_client_id);
$stmt->execute();
$first_name = $_POST['first_name'];
$stmt = $dbh->prepare("INSERT INTO client (first_name) VALUES (:first_name)");
$stmt->bindParam(':first_name', $first_name);
$stmt->execute();
$drug_client_id = $dbh->lastInsertId();
$stmt = $dbh->prepare("INSERT INTO drug (drug1, drug2, drug3, drug_client_id) VALUES (:drug1, :drug2, :drug3, :drug_client_id)");
$stmt->bindParam(':drug1', $drug1);
$stmt->bindParam(':drug2', $drug2);
$stmt->bindParam(':drug3', $drug3);
$stmt->bindParam(':drug_client_id', $drug_client_id);
$stmt->execute();
您需要做的是要求(“dbconnect.php”);在顶部只需一次首先,您需要澄清您的数据库模型: 表体系结构 2-当您希望从用户处获取信息时,请参见以下示例:
// You know id_user & id_drug
$req = $db->prepare("INSERT INTO user_use_drug(id_user, id_drug, usage)
VALUES (:id_user, :id_drug, NOW())");
$req->bindParam('id_user', $id_user, PDO::PARAM_INT);
$req->bindParam('id_drug', $id_drug, PDO::PARAM_INT);
$req->execute();
// You know user name (unique) but you know id_drug
$req = $db->prepare("INSERT INTO user_use_drug(id_user, id_drug, usage)
VALUES (
(SELECT id_user FROM user WHERE name = :uname),
:id_drug,
NOW()
)");
$req->bindParam('id_user', $id_user, PDO::PARAM_INT);
$req->bindParam('id_drug', $id_drug, PDO::PARAM_INT);
$req->bindParam('uname', $uname, PDO::PARAM_STR);
$req->execute();
// You know user name (unique) and drug name (unique too)
$req = $db->prepare("INSERT INTO user_use_drug(id_user, id_drug, usage)
VALUES (
(SELECT id_user FROM user WHERE name = :uname),
(SELECT id_drug FROM drug WHERE name = :dname),
NOW()
)");
$req->bindParam('id_user', $id_user, PDO::PARAM_INT);
$req->bindParam('id_drug', $id_drug, PDO::PARAM_INT);
$req->bindParam('uname', $uname, PDO::PARAM_STR);
$req->bindParam('dname', $dname, PDO::PARAM_STR);
$req->execute();
// Get list of drugs used if you know the id_user
// + retrieve his informations too
// + retrieve datas on drug
$req = $db->prepare("SELECT * FROM user_use_drug
LEFT JOIN user ON user.id_user = user_use_drug.id_user
LEFT JOIN drug ON drug.id = user_use_drug.id_drug
WHERE user_use_drug.id_user = :id_user");
$req->bindParam('id_user', $id_user, PDO::PARAM_INT);
$req->execute();
// show every drug used
while($drug = $req->fetch(PDO::FETCH_ASSOC)){
echo $drug['name'];
}
// Variant to above
$req = $db->prepare("SELECT * FROM user_use_drug
NATURAL JOIN user
NATURAL JOIN drug
WHERE user_use_drug.id_user = :id_user");
$req->bindParam('id_user', $id_user, PDO::PARAM_INT);
$req->execute();
// Count the number of drugs used if you know the id_user
$req = $db->prepare("SELECT COUNT(*) as nbr FROM user_use_drug
WHERE id_user = :id_user");
$req->bindParam('id_user', $id_user, PDO::PARAM_INT);
$req->execute();
$rep = $req->fetch();
echo $rep['nbr'];
// Request to get the list of drugs used if you don't
// know the id_user but his name (unique)
$req = $db->prepare("SELECT * FROM user_use_drug
WHERE id_user = (SELECT id_user FROM user WHERE name = :name");
$req->bindParam('id_user', $id_user, PDO::PARAM_INT);
$req->bindParam('name', $name, PDO::PARAM_STR);
$req->execute();
// show every drug used
while($drug = $req->fetch(PDO::FETCH_ASSOC)){
echo $drug['name'];
}
3-删除客户端
您应该在数据库中定义外键/约束,并添加“删除/更新”操作,以允许在删除用户时自动删除“用户使用药物”中的行。否则您必须手动处理:删除id_user所在的所有行,然后删除该用户。您需要在插入
客户
表后执行一次操作,以获取客户id,然后将其插入药物
表。另请参阅,我认为它应该是$dbh->lastInsertId()代码>而不是stmt->lastinertid()代码>为帮助的小伙子们干杯,我可能需要在这个项目上不断的帮助,以获得不同的东西,所以是的,请观看这个空间