質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

解決済

cakephp3 sqlserver2008への接続方法

XYZA
XYZA

総合スコア0

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

3回答

0評価

0クリップ

7048閲覧

投稿2016/07/01 04:49

編集2022/01/12 10:58

###前提・実現したいこと
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

\\config\\app\.php 'Datasources' => \[ 'default' => \[ 'className' => 'Cake\\Database\\Connection', 'driver' => 'Cake\\Database\\Driver\\Mysql', \], '\*\*\*\*system' => \[ 'className' => 'Cake\\Database\\Connection', 'driver' => 'Cake\\Database\\Driver\\Sqlserver', 'persistent' => false, 'host' => '\*\*\*\.\*\*\*\.\*\.\*\*\*\\instance_name', //'port' => 'non_standard_port_number', 'username' => 'sa', 'password' => '\*\*\*\*\*\*\*\*', 'database' => '\*\*\*\*\*', 'encoding' => 'utf8', 'timezone' => 'UTC', 'flags' => \[\], 'cacheMetadata' => true, 'log' => false, 'quoteIdentifiers' => false, 'url' => env\('DATABASE_URL', null\), \],

###補足情報(言語/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

protected \$_baseConfig = \[ 'persistent' => false, 'host' => 'localhost\\SQLEXPRESS', 'username' => '', 'password' => '', 'database' => 'cake', // PDO::SQLSRV_ENCODING_UTF8 'encoding' => 2024, 'flags' => \[\], 'init' => \[\], 'settings' => \[\], \];

'encoding' => 65001,(UTF-8)から'encoding' => 2024,(Windows-31J)に変更してみましたがエラーが発生しました。
ついでに'encoding' => 932(SIFT_JIS)もだめでした。
※'encoding' => 65001,(UTF-8)でも同様のエラーでした。

ちなみに基幹システムのDBはutf-8にて作成されているので、特に変更の必要は無いはずですが、encodingエラーのためWindows-31Jに変更してみました

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

KatsumiTanaka
KatsumiTanaka

2016/07/01 05:46

類似の問題が解決済みのなっていますが、これは参照されましたが?https://teratail\.com/questions/22662
XYZA
XYZA

2016/07/01 06:04

https://teratail\.com/questions/22662 は参照しましたが、linaxではなく開発環境がWindowsのため、質問を別途上げさせていただいております。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。