Php 如何插入到两个单独的表中并使用相同的ID链接它们?

Php 如何插入到两个单独的表中并使用相同的ID链接它们?,php,html,mysql,Php,Html,Mysql,我有两个表(客户表和药物表),我创建了一个表单,将用户输入的信息插入这些表中。一个客户可能有很多以前的药物使用(简称为药物),因此我为多次药物使用制作了一个单独的表格,现在我需要将它们链接起来。客户端id是自动递增的,药物id也是自动递增的,但是我的药物客户端id不是,我需要它与客户端id相同(否则它们不会链接)。我不太确定该怎么做,所以如果有人能帮我,我将不胜感激 我无法让它在一个php文件上工作,所以我不得不将客户机和药物插入语句放在两个不同的文件中;所以如果你能帮我把它们也变成一个,我会更

我有两个表(客户表和药物表),我创建了一个表单,将用户输入的信息插入这些表中。一个客户可能有很多以前的药物使用(简称为药物),因此我为多次药物使用制作了一个单独的表格,现在我需要将它们链接起来。客户端id是自动递增的,药物id也是自动递增的,但是我的药物客户端id不是,我需要它与客户端id相同(否则它们不会链接)。我不太确定该怎么做,所以如果有人能帮我,我将不胜感激
我无法让它在一个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()为帮助的小伙子们干杯,我可能需要在这个项目上不断的帮助,以获得不同的东西,所以是的,请观看这个空间