我正在尝试创建第三个表,从两个不同的表中获取两个索引,以便使用以下代码创建它们之间的相关性:
$query1 = "select iduniverse from universe";
$query2 = "select idfiles from files";
$query3 = "select iduniFiles from uniFiles where filesId = ? and universeId = ?";
$query4 = "insert into uniFiles (filesId, universeId) values (?,?)";
if($stmt1 = $conn->prepare($query1)){
if($stmt2 = $conn->prepare($query2)){
if($stmt3 = $conn->prepare($query3)){
if($stmt4 = $conn->prepare($query4)){
$stmt1->execute();
$stmt1->bind_result($iduniverse);
while($stmt1->fetch()){
$stmt2->execute();
$stmt2->bind_result($idfiles);
while($stmt2->fetch()){
$stmt3->bind_param("ii", $idfiles, $iduniverse);
$stmt3->execute();
$stmt3->store_result();
if($stmt3->num_rows == 0){
$stmt4->bind_param("ii", $idfiles, $iduniverse);
$stmt4->execute();
}
}
}
}
$stmt4->free_result();
}
$stmt3->free_result();
}
$stmt2->free_result();
}
$stmt1->free_result();
但是如果我在第二个while循环后加上一个echo "here'n"
while($stmt2->fetch()){
echo "here'n";
...
当我启动我的代码时,我在屏幕输出上看不到任何东西,而且表uniFiles仍然是空的。
我已经通过SQL浏览器检查查询和工作没有任何问题。所以我不明白错误在哪里。
我的脚本有什么问题?
您可以使用INSERT INTO INTO SELECT ...
insert into uniFiles (filesId, universeId)
select iu.iduniverse, if.idfiles
from universe iu
join files if on if.idfiles = iu.idfiles
如果有重复,则与INSERT IGNORE
结合
insert ignore into uniFiles (filesId, universeId)
select iu.iduniverse, if.idfiles
from universe iu
join files if on if.idfiles = iu.idfiles
一个mysqli连接一次只能容纳一条活动的预处理语句。
因此,在同一个连接上不能有嵌套的准备语句。如果您需要使嵌套的每一层都保持活动状态(至少对于不希望被下一层查询压扁的每一层),则必须为每一层都有单独的连接。