首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入两个表中,一个表具有另一个表的外键

插入两个表中,一个表具有另一个表的外键
EN

Stack Overflow用户
提问于 2017-05-22 14:53:39
回答 1查看 758关注 0票数 2

我在SO中看到了类似的问题,大多数解决方案都是以.NET为中心的和/或使用存储过程。帮不上那么多忙。这是后端的一个片段,用于解决应用程序中的一个问题。

代码语言:javascript
复制
$executestat=0;
//-------------------------
//PHASE-1
$sql = "INSERT INTO first_table (a_name,a_type,a_location) 
values('".$a_name."','".$a_type."','".$a_location."')";
if($result = $conn->query($sql)){
    $executestat=$executestat+1;
}
//-------------------------

//-------------------------
//PHASE-2
$sql = "SELECT f.a_id
from first_table as f
order by f.f_id desc limit 1";
if($result = $conn->query($sql)){
    $executestat=$executestat+1;
}
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $max_a_id = $row["a_id"];
    }
}else{$executestat=$executestat-1;}
//-------------------------

//-------------------------
//PHASE-3
$sql = "INSERT INTO second_table (a_id,b_title,b_location) 
values('".$max_a_id."','".$b_title."','".$b_location."')";
if($result = $conn->query($sql)){
    $executestat=$executestat+1;
}
//-------------------------

问题描述:

  • 从一个表单中,我尝试将数据插入到first_tablesecond_table中。
  • first_table.的外键second_table有字段a_id。( first_table)上的a_id是自动增量主键。)

我现在是怎么处理的:

我被告知,这类问题通常是通过在第二个查询中查询first_table,,得到最近的id,然后使用它,同时在第三个查询中插入数据,插入到second_table.中。

出什么事了

我听取了一个处理数据库很长时间的人的建议。我不知道这是否是我正在做的事情,因为偶尔只有第一个查询运行think)*,(或者说我完全失败了其他查询)。

  • *(我认为是这样):因为成功的条件是if($executestat==3)。因此,我知道第一个查询是运行的(因为Db是用first_table插入更新的),但我不确定第二个查询是否正在运行。但是,我确实知道至少有一个,但不是所有的查询都在运行。中有一种将错误回显到文件中的方法。这对来说太棒了
  • 另外,在任何人指出之前,我稍后将用准备好的语句来解决SQL注入问题。我现在就需要关于这个的建议。

tl;dr

  • 试图插入两个表,一个使用另一个的外键a_id
  • 通过在第一个查询中插入first_table,在第二个查询中找到最大a_id,在第三个查询中使用$max_a_id插入second_table来处理这个问题。
  • 有时这是出乎意料的失败。我知道至少执行一个查询,但不是所有查询都执行,因为first_table在Db中插入了新的数据,但是应该具有第一个插入的并发数据的second_table没有。
  • 如何将错误的回显发送到文件,以便准确地捕捉所有失败的位置?
  • 发现$max_a_id是一种糟糕的方法吗?有人能告诉我更好的方法吗?

有人能指出我做错了什么吗?一个小片段(对此进行修改;更好的是完全的修改)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-22 15:12:08

插入后,使用$mysqli->insert_id;获取插入值。

代码语言:javascript
复制
$sql = "INSERT INTO first_table (a_name,a_type,a_location) 
values('".$a_name."','".$a_type."','".$a_location."')";
if($result = $conn->query($sql)){
    $executestat=$executestat+1;
}
$max_a_id = $conn->insert_id;
//----
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44116075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档