setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $con->prepare('{ CALL usp_multi (?) }'); $arg = 123; $stmt->bindParam(1, $arg, PDO::PARAM_INT); $stmt->execute(); $rs = $stmt->fetchAll(); foreach($rs as $row) { echo $row[0] . "\r\n"; } $stmt->nextRowset(); // switch from first to second result set $rs = $stmt->fetchAll(); foreach($rs as $row) { echo $row[0] . "\r\n"; } } catch (PDOException $ex) { die($ex->getMessage()); } } function testMultiReturnTypes() { try { $con = new PDO('sqlsrv:server=ARNEPC4;database=Test', '', ''); $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $con->prepare('{ ? = CALL usp_return (?, ?) }'); $retval = -1; $stmt->bindParam(1, $retval, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 4); // return value $inarg = 123; $stmt->bindParam(2, $inarg, PDO::PARAM_INT); // in argument $outarg = -1; $stmt->bindParam(3, $outarg, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 4); // out argument $stmt->execute(); $rs = $stmt->fetchAll(); foreach($rs as $row) { echo $row[0] . "\r\n"; } $stmt->nextRowset(); // necessary before return value and out arg are available for unknown reasons echo "return value = $retval\r\n"; echo "out parameter = $outarg\r\n"; } catch (PDOException $ex) { die($ex->getMessage()); } } testMultiReseultSets(); testMultiReturnTypes(); ?>