Ini adalah sedikit fitur buruk dari PDO yang tidak didokumentasikan dengan baik. Metode closeCursor tidak bekerja ketika pernyataan telah mengeksekusi prosedur tersimpan. Anda perlu menggunakan metode nextRowSet. Inilah yang saya gunakan
while($sth->nextRowSet())
{
$sth->fetchAll();
}
$sth->closeCursor();