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

Php 插入到两个表中,一个表具有另一个表的外键,php,mysql,Php,Mysql,我在SO中研究过类似的问题,大多数解决方案都是以.NET为中心和/或使用存储过程的。这方面的帮助太少了。这是我用来解决应用程序中问题的后端的一个片段 $executestat=0; //------------------------- //PHASE-1 $sql = "INSERT INTO first_table (a_name,a_type,a_location) values('".$a_name."','".$a_type."','".$a_location."')"; if($r

我在SO中研究过类似的问题,大多数解决方案都是以.NET为中心和/或使用存储过程的。这方面的帮助太少了。这是我用来解决应用程序中问题的后端的一个片段

$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;
}
//-------------------------
问题描述:
  • 从单个表单开始,我尝试将数据插入到第一个\u表和第二个\u表中
  • 第二个\u表有一个字段
    a\u id
    ,它是第一个\u表的外键。(
    a_id
    是第一个表上的自动递增主键
我现在是如何处理的: 我被告知,这类问题通常是通过在第二次查询中查询第一个\u表,获取最新的
id
,然后在第三次查询中插入数据时使用它,插入第二个\u表

出什么事了 我从一个长期从事数据库工作的人那里得到了这个建议。我不知道这是否是我正在做的事情,因为偶尔只有第一个查询运行(或者我认为是这样)*,其他查询完全失败

  • *(或者我认为是这样):因为成功的条件是
    if($executestat==3)
    。因此,我知道第一个查询正在运行(因为数据库会随着第一个\u表的插入而更新),但我不确定第二个查询是否正在运行。但是,我知道至少有一个但不是所有的查询都在运行是否有一种方法可以将错误回送到PHP中的文件中。这太好了
  • 另外,在有人指出之前,我将在后面用准备好的语句解决SQL注入问题。我现在只需要这方面的建议
tl;博士
  • 正在尝试插入两个表,其中一个表的外键为另一个表的a_id
  • 通过在第一个查询中插入第一个_表,在第二个查询中查找max
    a_id
    ,在第三个查询中使用
    $max\u a_id
    插入第二个_表来处理此问题
  • 有时,这是出人意料的失败。我知道至少会执行一个但不是所有的查询,因为第一个_表在数据库中插入了新数据,但第二个_表(应该有与第一次插入相关的并发数据)不会执行
  • 如何将错误的回音发送到文件中,以便准确地捕获所有故障的位置
  • 找出
    $max\u a\u id
    是一个糟糕的方法吗?有谁能告诉我更好的方法吗
有人能指出我做错了什么吗?一个小片段(对它的修改;更好的是完全的修改)


插入后,使用
$mysqli->insert\u id以获取插入的值

$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;
//----

你知道你只需要得到最后一个插入的id,而不用额外的查询,对吗?@Naruto。我不知道,甚至不考虑这种可能性。谢谢我会测试一下