CodeIgniter と SQLServer でカラム名にUPDATEまたはINSERTがある場合のSELECT

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());

と修正してとりあえず良さげ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です