FuelPHPにSQL Serverを連携させたPHPのWebアプリを作ったときに出た問題。
SQL文自体には問題がなかったのですが、このようなエラーが発生しました。
原因はFuelPHP側の設定ファイルに文字コード設定を入れてしまっていたこと。
// fuel/app/config/db.php
return array(
'default' => array(
'type' => 'pdo',
'connection' => array(
'dsn' => 'sqlsrv:Server=localhost;Database=hoge_db;',
'username' => 'user',
'password' => 'password123',
'persistent' => false,
),
'identifier' => '',
'table_prefix' => NULL,
'charset' => 'utf8', //←これが原因
)
);
charsetを入れると、DB呼び出し時にfuelが自動的に
SET NAMES 文字コード;
のようなSQL文を実行しようとします。
ところが、SQL Serverではこの”SET NAMES”オプションが廃止されており、これが原因でSQL実行時に毎回エラーになってしまいます。
対策としては
'charset' => 'utf8',
を
'charset' => '',
と書き換えれば、SET NAMESが行われなくなり、エラーが解決します。
いろいろ調べまくってやっと判明したぐらい細かい項目で、原因がわかるまで苦労しました…
お困りの方の参考になれば幸いです。