Po načtení všech výsledků ve smyčce spuštění byste měli získat další sadu řádků a poté zavřete kurzor, než se znovu pokusíte o provedení uložené procedury. Zkuste toto:
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
}
Opravdu důležitým doplňkem je zde volání nextRowSet() . Pod kapotou PDO vrací druhou sadu řádků ke kterému potřebujete přístup před provedením druhé (a následné) uložené procedury na stejném připojení.