実行ループですべての結果をフェッチした後、次の行セットを取得してからカーソルを閉じてから、ストアドプロシージャの実行を再試行する必要があります。これを試してください:
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
}
ここで本当に重要な追加は、 nextRowSet() の呼び出しです。 。内部的には、PDOは2番目の行セットを返します。 同じ接続で2番目(およびそれ以降)のストアドプロシージャを実行する前にアクセスする必要があります。