När du har hämtat alla resultat i din exekveringsslinga bör du hämta nästa raduppsättning och sedan stänga markören innan du försöker köra den lagrade proceduren igen. Prova detta:
foreach($data_arr AS $key => $val){
$values = $val;
$stmt->execute();
$res = $stmt->fetchAll();
$stmt->nextRowset(); // NEW: Get the next rowset after fetching your results
$stmt->closeCursor(); // NEW: Close the cursor
}
Det riktigt viktiga tillägget här är uppmaningen till nextRowSet() . Under huven returnerar PDO en andra raduppsättning som du behöver komma åt innan du kör en andra (och efterföljande) lagrad procedur på samma anslutning.