Php 获取数据并使用循环(MSQL/I)插入它
我从表A中选择数据,我想要的是使用循环插入该数据 这是我的密码: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
$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']}')");
}