Php 获取数据并使用循环(MSQL/I)插入它

Php 获取数据并使用循环(MSQL/I)插入它,php,mysql,loops,for-loop,mysqli,Php,Mysql,Loops,For Loop,Mysqli,我从表A中选择数据,我想要的是使用循环插入该数据 这是我的密码: $getlvls = "SELECT * FROM `access_chart` WHERE `ac_id`='$data->ac_id'"; $qry99 = $con->query($getlvls); while($row = $qry99->fetch_assoc()) { $lvl1 = $row['lvl1']; $lvl2 = $row['lv

我从表A中选择数据,我想要的是使用循环插入该数据

这是我的密码:

    $getlvls = "SELECT * FROM `access_chart` WHERE `ac_id`='$data->ac_id'";
    $qry99 = $con->query($getlvls);
    while($row = $qry99->fetch_assoc()) {
        $lvl1 = $row['lvl1'];
        $lvl2 = $row['lvl2'];
        $lvl3 = $row['lvl3'];
        $lvl4 = $row['lvl4'];
    }

    for($jaa = 1; $jaa <=4; $jaa++){
        $auth_id = '$lvl'+$jaa;
        $sql1 = "INSERT INTO `overtime_log`(`ot_id`, `lvl`, `user_id`) VALUES('$ot_id', $jaa, '$auth_id')";
        $qry = $con->query($sql1);
    }

不确定在何处定义了
$ot_id
,但假设您只使用id,并且SQL注入不是一个问题,那么您可以使用如下内容:

$getlvls = "SELECT * FROM `access_chart` WHERE `ac_id`='$data->ac_id'";
$qry99 = $con->query($getlvls);
while($row = $qry99->fetch_array())
{
    foreach(array(1=>$row['lvl1'],2=>$row['lvl2'],3=>$row['lvl3'],4=>$row['lvl4']) as $key=>$lvl)
    {
        $sql1 = "INSERT INTO `overtime_log`(`ot_id`, `lvl`, `user_id`) VALUES('$ot_id', $key, '$lvl')";
        $qry = $con->query($sql1);      
    }
}
或者,您可以完全避免内部循环,只需使用多重插入语法编写插入:

$getlvls = "SELECT * FROM `access_chart` WHERE `ac_id`='$data->ac_id'";
$qry99 = $con->query($getlvls);
while($row = $qry99->fetch_array())
{
    $con->query("INSERT INTO `overtime_log`(`ot_id`, `lvl`, `user_id`)
    VALUES('$ot_id', 1, '{$row['lvl1']}'),
    ('$ot_id', 2, '{$row['lvl2']}'),
    ('$ot_id', 3, '{$row['lvl3']}'),
    ('$ot_id', 4, '{$row['lvl4']}')");
}

如果有效,问题出在哪里?@Ultimate,除了插入列
lvl1
lvl2
lvl3
lvl4
之外,其他一切都有效。我更新了我的问题,并添加了一个关于如何选择和插入数据的可视化演示。在更新之前,我认为您的问题是由
引起的($row=$qry99->fetch_assoc()){
因为您将循环所有结果,而不是将行存储在数组中。但是在更新之后,
ac\u id
似乎是您的主键。可能您的问题是,
$ot\u id
没有定义。请尝试改用
$data->ac\u id
来启用错误报告,并查看查询是否正确运行类似这样的逻辑:
if(!$con->query($sql){printf(“错误:%s\n”,$con->Error);}
还要检查SELECT查询是否确实返回行:
echo$qry99->num_rows;
。报告您的发现。我在第一个代码段中发现了一个错误,其中一个
{
,对此很抱歉。如果启用了错误报告功能,您会很容易发现这一点。正如我之前所说,一切都很好并且正常工作。这是关于如何将数据从一个表插入到另一个表的逻辑。这是关于
fetch_assoc()
。它应该是
fetch_array()
,一切都会正常工作。谢谢,伙计:)编辑您的答案并将
fetch\u assoc()
替换为
fetch\u array()
,我将接受您的正确答案。
$getlvls = "SELECT * FROM `access_chart` WHERE `ac_id`='$data->ac_id'";
$qry99 = $con->query($getlvls);
while($row = $qry99->fetch_array())
{
    $con->query("INSERT INTO `overtime_log`(`ot_id`, `lvl`, `user_id`)
    VALUES('$ot_id', 1, '{$row['lvl1']}'),
    ('$ot_id', 2, '{$row['lvl2']}'),
    ('$ot_id', 3, '{$row['lvl3']}'),
    ('$ot_id', 4, '{$row['lvl4']}')");
}