* @package Mammut\DB\Adapter\MSSQL */ class StmtV2 extends Statement { /** * * @param \sqlsrv $db * @param string $stmt * an sql statement */ public function __construct($db, $stmt, $limit = -1, $skip = 0) { $this->db = &$db; $this->stmt = $stmt; } public function execute(array $param = array()) { foreach ($param as &$p) { if($p instanceof \DateTime) $p = $p->format('Y-m-d\TH:i:s'); } $this->result = sqlsrv_query($this->db, $this->stmt, $param, array( 'Scrollable' => SQLSRV_CURSOR_STATIC)); $errors = sqlsrv_errors(); if(!empty($errors)) { $st = ''; foreach($errors as $error) $st = implode(':', $error); throw new SQLException($st, $this->stmt, -1, $param); } if(empty($this->meta)) { // TODO: add metadata } return true; } public function getColumns() { if(empty($this->result)) return -1; return sqlsrv_num_fields($this->result); } public function getColumnInfo($column) { throw new ImplementationException('not implemented'); } public function getColumnCount() { if(empty($this->result)) return -1; return sqlsrv_num_fields($this->result); } public function getRowNumber() { if(empty($this->stmt)) return -1; return $this->rownr; } public function getRowCount() { if(empty($this->result)) return -1; return sqlsrv_num_rows($this->result); } public function fetchRow() { return sqlsrv_fetch_array($this->result, SQLSRV_FETCH_NUMERIC); } public function fetchArray() { return sqlsrv_fetch_array($this->result, SQLSRV_FETCH_ASSOC); } public function fetchObject($class = false, $param = array()) { if(!$class) $class = 'stdClass'; if(!class_exists($class)) throw new \BadMethodCallException('class ' . $class . ' is not defined'); return sqlsrv_fetch_object($this->result, $class, $param); } public function free() { if(is_resource($this->result)) sqlsrv_free_stmt($this->result); $this->executed = false; } public function close() { $this->free(); } public function __destruct() { $this->close(); } }