我在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;
}
//-------------------------问题描述:
a_id。( first_table)上的a_id是自动增量主键。)我现在是怎么处理的:
我被告知,这类问题通常是通过在第二个查询中查询first_table,,得到最近的id,然后使用它,同时在第三个查询中插入数据,插入到second_table.中。
出什么事了
我听取了一个处理数据库很长时间的人的建议。我不知道这是否是我正在做的事情,因为偶尔只有第一个查询运行think)*,(或者说我完全失败了其他查询)。
if($executestat==3)。因此,我知道第一个查询是运行的(因为Db是用first_table插入更新的),但我不确定第二个查询是否正在运行。但是,我确实知道至少有一个,但不是所有的查询都在运行。中有一种将错误回显到文件中的方法。这对来说太棒了tl;dr
a_id。a_id,在第三个查询中使用$max_a_id插入second_table来处理这个问题。$max_a_id是一种糟糕的方法吗?有人能告诉我更好的方法吗?有人能指出我做错了什么吗?一个小片段(对此进行修改;更好的是完全的修改)
发布于 2017-05-22 15:12:08
插入后,使用$mysqli->insert_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;
//----https://stackoverflow.com/questions/44116075
复制相似问题