###前提・実現したいこと
Microsoft SqlServer2008 をCakephp3にて使用したい。
デフォルトではPHPMyAdminにて作成したDBを使用し、別のDBに登録しているSqlServer2008の情報を元に、デフォルトでつないでいるDBへデータの登録をしたいと思っています。
###発生している問題・エラーメッセージ
Database driver Cake\Database\Driver\Sqlserver cannot be used due to a missing PHP extension or unmet dependency
###該当のソースコード
php
1\config\app.php 2 3'Datasources' => [ 4 'default' => [ 5 'className' => 'Cake\Database\Connection', 6 'driver' => 'Cake\Database\Driver\Mysql', 7 ・ 8 ・ 9 ・ 10 ・ 11 ・ 12 ・ 13 ], 14 '****system' => [ 15 'className' => 'Cake\Database\Connection', 16 'driver' => 'Cake\Database\Driver\Sqlserver', 17 'persistent' => false, 18 'host' => '***.***.*.***\instance_name', 19 20 //'port' => 'non_standard_port_number', 21 'username' => 'sa', 22 'password' => '********', 23 'database' => '*****', 24 'encoding' => 'utf8', 25 'timezone' => 'UTC', 26 'flags' => [], 27 'cacheMetadata' => true, 28 'log' => false, 29 'quoteIdentifiers' => false, 30 'url' => env('DATABASE_URL', null), 31 ],
###補足情報(言語/FW/ツール等のバージョンなど)
SqlServer2008、Cakephp3、Windows7
追記①:
phpinfo();
を確認すると、PDOのenabledが「mysql, sqlite」となっており、SqlServerが含まれていないのが原因かと思っています。
追記②:
実行したこと
https://blogs.msdn.microsoft.com/osamum/2010/09/26/php-ms-sql-server/
を参考に
SQLSRV20.EXEをダウンロードし、ファイルをC:\xampp\php\extに配置し、
php.iniに以下を記載しましたが、だめでした。
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_sqlsrv_53_nts_vc6.dll
extension=php_pdo_sqlsrv_53_nts_vc6.dll
→ファイルを再度確認したところ、
https://www.microsoft.com/en-us/download/details.aspx?id=20098
からexeを落としてファイルを解凍しましたが、
必要とされているファイル
php_sqlsrv_53_nts_vc6.dll
php_pdo_sqlsrv_53_nts_vc6.dll
がダウンロードできませんでした。
→SQLSRV20.EXEを再度インストールしなおしたところ
php_sqlsrv_53_nts_vc6.dll
php_pdo_sqlsrv_53_nts_vc6.dll
がダウンロードできました。
が、、、XAMMPのAPACHEを動かすと
「コンピューターにphp5.dllがないため、プログラムを開始できません。コノ問題を解決するには、プログラムを再インストールしてみてください」とシステムエラーが発生しました。
C:\xampp\php\extには「php5.dll」は存在していません。
→2016/07/04:追記
使用中のPHPのバージョンを確認し、再度入れるファイルを確認したところ、「5.6.23」だったため、
php_sqlsrv_56_ts.dll
php_pdo_sqlsrv_56_ts.dll
を入れなおしました。
phpinfo();
を確認すると、PDOのenabledが「sqlsrv, mysql, sqlite 」となることを確認しました。
追記③:
現在、****systemにつなぐためにソースを記載し実行すると以下のエラー が発生します。
Error: SQLSTATE[IMSSP]: This extension requires the Microsoft ODBC Driver 11 for SQL Server to communicate with SQL Server. Access the following URL to download the ODBC Driver 11 for SQL Server for x86: http://go.microsoft.com/fwlink/?LinkId=163712
とエラーになります。
http://book.cakephp.org/3.0/ja/orm/database-basics.html
の「Select 文の実行」を参考にソースを記載しました。
→ODBCドライバをインストールしたところ、上記エラーは発生しなくなりました
追記④:
現在、****systemにつなぐためにソースを記載し実行すると以下のエラー が発生します。
Error: SQLSTATE[IMSSP]: An invalid encoding was specified for SQLSRV_ATTR_ENCODING.
とエラーになります。
http://itdoc.hitachi.co.jp/manuals/3020/30203M0360/EM030327.HTM
上記を参考に文字コードの設定を「Windows-31J」に以下のファイルを変更しています。
\vendor\cakephp\cakephp\src\Database\Driver\Sqlserver.php
php
1 protected $_baseConfig = [ 2 'persistent' => false, 3 'host' => 'localhost\SQLEXPRESS', 4 'username' => '', 5 'password' => '', 6 'database' => 'cake', 7 // PDO::SQLSRV_ENCODING_UTF8 8 'encoding' => 2024, 9 'flags' => [], 10 'init' => [], 11 'settings' => [], 12 ];
'encoding' => 65001,(UTF-8)から'encoding' => 2024,(Windows-31J)に変更してみましたがエラーが発生しました。
ついでに'encoding' => 932(SIFT_JIS)もだめでした。
※'encoding' => 65001,(UTF-8)でも同様のエラーでした。
ちなみに基幹システムのDBはutf-8にて作成されているので、特に変更の必要は無いはずですが、encodingエラーのためWindows-31Jに変更してみました
追記⑤:
php
1\config\app.php 2 3'encoding' => PDO::SQLSRV_ENCODING_UTF8, 4
こちらで無事つながることを確認しました。
参考URL:http://stackoverflow.com/questions/20042778/cakephp-sqlserver-encoding
回答3件
あなたの回答
tips
プレビュー