FuelPHP + pdo_sqlsrv + SQL Server で「’NAMES’ は SET オプション として認識されません。」となったときの対処法

  • 2019年4月8日
  • 2019年4月9日
  • SQL

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が行われなくなり、エラーが解決します。

いろいろ調べまくってやっと判明したぐらい細かい項目で、原因がわかるまで苦労しました…

お困りの方の参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG