我在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 上的自动增加主键我被告知通常会通过在第二个查询中查询 first_table 来处理此类问题,以获取最新的id
然后再使用它,同时在第三个查询中插入数据,以插入 second_table 。
我从那些长期处理数据库的人那里得到了这个建议。我不知道它是否是我正在做的事情,因为偶尔只有第一个查询运行 (或者我认为)* ,完全没有完成其他查询。
if($executestat==3)
。所以我知道第一个查询运行(因为Db使用 first_table 插入进行更新),但我不确定第二个查询是否正在运行。但是,我知道至少一个但并非所有查询都在运行。 有没有办法在PHP中将错误回显到文件中。这对于 a_id
。a_id
,使用$max_a_id
在第三个查询中插入second_table。$max_a_id
是一种糟糕的方法吗?谁能告诉我一个更好的方法?有人可以指出我做错了什么吗?一个小片段(对此进行修改;更好的是完全改造)
答案 0 :(得分:1)
插入后,使用$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;
//----