【问题标题】:insert data to parent and child table at the same time同时向父子表插入数据
【发布时间】:2015-10-19 13:20:26
【问题描述】:

我这里有三张桌子

 customer table
-----------------------------
|customer_id | customer_Name |
-----------------------------
product table
-----------------------------
| product_id | event_Name    |
-----------------------------
reservation table
----------------------------------------------------------------------
|reserve_id | customer_id | product_id | date_usage | motif | venue |
----------------------------------------------------------------------

问题是我想将数据与父表同时插入保留表。我将如何使用 PHP 做到这一点?我在网上搜索过,我对使用存储过程很感兴趣,但我不知道如何使用过程。 我将如何使用 php 编写代码?提前致谢。

PHP 代码:

$price2 = $_POST['price1'];
$pack2 = $_POST['pack1'];
$name = $_POST['textinput11'];
$motif = $_POST['textinput22'];
$venue = $_POST['textinput44'];
$event2 = $_POST['events1'];
$currentdate = date('Y/m/d');


$reserve = mysql_query("INSERT INTO reservation_info(Event_Motif,Event_Venue,Date_Subtmitted,Date_of_Usage) VALUES('$motif','$venue','$currentdate','$date2')");
$customer = mysql_query("INSERT INTO customer(CustomerName) VALUES('$name')");
$product  = mysql_query("INSERT INTO product_t(Event_Type,Price) VALUES('$event2','$price2')");


if($customer & $product & reserve){
    echo "You have successfully reserved";
}

【问题讨论】:

  • 您的问题还不清楚,请告诉我们您要达到的目标是什么。据我所知,您有一个特定的客户预订产品。你为什么坚持同时做?为什么你不能在用户决定预订并在预订中插入记录的那一刻获取客户和产品 ID?
  • 你应该开始两个插入,一个用于客户,一个用于预订。假设它是一个新客户。
  • @AngelIliikov 每当我将网页中的数据提交到我的数据库时,它只会将数据保存在父表中,但由于外来关系而不会保存在子表中。如何将我的父表中的数据同时插入到子表中?
  • @Shadow 我将如何使用事务编码?
  • @drandrebandal 是否使用事务并不重要,关键是先将记录插入父表,然后再插入子表。在您尝试为新客户插入预订的位置发布您的 php 代码。

标签: php mysql stored-procedures


【解决方案1】:

问题在于插入语句的顺序。首先,您尝试在预订表(即子表)中插入一行,但您还没有 cudtomer_id。

将交易放在一边,先插入到客户表中以创建您的客户。根据您的代码,我相信 customer_id 是一个自动增量字段。因此,在插入到客户表后调用mysql_insert_id() 函数来检索新创建的客户ID。

然后对产品表重复相同的操作。

最后,执行插入到 reservations 表中,但这次使用您检索到的 2 个 id 在查询中显式地提供客户和产品 id。

注意1:不要使用mysql扩展,它已被弃用。请改用 mysqli 或 PDO。

注意2:您可以将上述插入封装到一个事务中。在生产代码中,我鼓励你这样做,如果只是为了学习,那么现在就不用费心了。

【讨论】:

  • 不幸的是,我不知道 pdo 的语法是什么,但是当我使用 php 应用您的步骤时它可以工作。谢谢您的时间先生。
  • Mysqli 将是比 PDO 更直接的选择。
【解决方案2】:

您必须使用事务。算法看起来像:

  1. 开始;
  2. 在父表中插入行
  3. 插入预留
  4. 提交;

事务保证您的命令将同时运行(使用简单的语言,跳过技术细节)

【讨论】:

  • 在不知道谁预订的情况下如何插入预订?反之亦然:先将数据插入父表,然后再插入子表。
猜你喜欢
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 2018-05-07
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多