Categories: IT

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

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

管理者

Recent Posts

Androidにて「Cookieが無効です 」が出る

AndroidスマホのChro…

2か月 ago

GASで半角カナから全角カナへ変換

Googleスプレッドシートに…

3か月 ago

This website uses cookies.