我有两个数组,我在插入数据库方面遇到了问题
foreach ($turma as $idTurma){
foreach ($aluno as $numAlunos){
$this->setTabelaVisitasTurmas($id_ano, $idTurma, $idVisita, $numAlunos);
}
}
例如,第一个数组是1,2,3,4
第二个数组是2,12,17,16
而不是给我4条记录,它给出了16条错误的记录......
//Tabela VisitasTurmas
public function setTabelaVisitasTurmas($id_ano, $idTurma, $idVisita, $numAlunos){
try{
$stmt = $this->db->prepare("INSERT INTO visitasturmas (idVisita,idTurma,numAlunos,idAnoEscolar) VALUES(:idVisita,:idTurma,:numAlunos,:idAnoEscolar);");
$stmt->bindparam(":idAnoEscolar", $id_ano);
$stmt->bindparam(":idTurma", $idTurma);
$stmt->bindparam(":idVisita", $idVisita);
$stmt->bindparam(":numAlunos", $numAlunos);
if(!$stmt->execute()){
print_r($stmt->errorInfo());
return array('status' => 'error', 'message' => 'Problema ao gravar esta nova atividade na tabela referencial...');
}else{
return $resultado = true;
}
}catch (Exception $ex) {
echo $ex->getMessage();
}
}
答案 0 :(得分:0)
没错。您正在使用以下
执行2个嵌套的foreach循环A2
什么是4 * 4?
你猜对了,16。
您正在插入16行,而不是4行。您对foreach的理解不正确或者您无法成倍增加。
答案 1 :(得分:0)
你说第一个数组是1,2,3,4
$turma = array(1, 2, 3, 4);
第二个数组是2,12,17,16
$aluno = array(2, 12, 17, 16);
您获得的是预期的行为(16条记录)。您告诉该计划,$turma
中的每个项目都会浏览$aluno
中的每个项目。 4x4 = 16
这就是发生的事情......
$idTurma = 1, $numAlunos = 2
$idTurma = 1, $numAlunos = 12
$idTurma = 1, $numAlunos = 17
$idTurma = 1, $numAlunos = 16
$idTurma = 2, $numAlunos = 2
$idTurma = 2, $numAlunos = 12
$idTurma = 2, $numAlunos = 17
$idTurma = 2, $numAlunos = 16
$idTurma = 3, $numAlunos = 2
$idTurma = 3, $numAlunos = 12
$idTurma = 3, $numAlunos = 17
$idTurma = 3, $numAlunos = 16
$idTurma = 4, $numAlunos = 2
$idTurma = 4, $numAlunos = 12
$idTurma = 4, $numAlunos = 17
$idTurma = 4, $numAlunos = 16
如果你只想要四个记录,那么你可能不应该有第二个foreach循环,而是可能在插入数据库之前想要一起添加一些值。