Après avoir extrait tous les résultats de votre boucle d'exécution, vous devez obtenir l'ensemble de lignes suivant, puis fermer le curseur avant de tenter d'exécuter à nouveau la procédure stockée. Essayez ceci :
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
}
L'ajout vraiment important ici est l'appel à nextRowSet() . Sous le capot, PDO renvoie un deuxième rowset auquel vous devez accéder avant d'exécuter une deuxième procédure stockée (et les suivantes) sur la même connexion.