Codeigniter にて SQLServer に sqlsrv ドライバで接続してる場合の不具合。
SQL Server のテーブルにupdateやinsertという文字のつくカラムがあった場合、
たとえば update_timestamp など、
SELECT update_timestamp FROM HOGE;
と流してもレコードセットが返ってこない。
なんでかと sqlsrv_driver.php の _execute() を探ってみたところ、
update または insert て文字がSQLにあった場合、
レコードセットを返さないロジックになってる。
if(stripos($sql,'UPDATE') !== FALSE || stripos($sql,'INSERT') !== FALSE) { return sqlsrv_query($this->conn_id, $sql, null, array()); } return sqlsrv_query($this->conn_id, $sql, null, array( 'Scrollable' => SQLSRV_CURSOR_STATIC, 'SendStreamParamsAtExec' => true ));
先頭に UPDATE、INSERT ならわかるけど・・・。
てか、DELETE の場合は? TRUNCATE の場合は??
そもそもレコードセット欲しいのは SELECT の時でしょ。
ということで、
if (stripos($sql, 'SELECT') === 0) { return sqlsrv_query($this->conn_id, $sql, null, array( 'Scrollable' => SQLSRV_CURSOR_STATIC, 'SendStreamParamsAtExec' => true )); } return sqlsrv_query($this->conn_id, $sql, null, array());
と修正してとりあえず良さげ。