Nested stmt mysqli PHP


Nested stmt mysqli PHP

我正在尝试创建第三个表,从两个不同的表中获取两个索引,以便使用以下代码创建它们之间的相关性:

$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连接一次只能容纳一条活动的预处理语句。

因此,在同一个连接上不能有嵌套的准备语句。如果您需要使嵌套的每一层都保持活动状态(至少对于不希望被下一层查询压扁的每一层),则必须为每一层都有单独的连接。