0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Symfony 5.2 IIS Microsoft SQL Server インスタンス付き 設定でハマったのでメモ

Last updated at Posted at 2021-03-03

##環境
Windows Server 2012 R2 64bit (うちが納めたサーバーでないので古い)
IIS 6.2
SQL Server2014 Express
PHP 7.4 (MicrosoftはPHP8.0をサポートしないとか言ってるので7.4)
Symfony 5.2.3

接続先 Server 情報

Server = localhost¥¥SQLEXPRESS
uid = sa
password = password
database = symfonydb

DB 接続設定

.env.local (正解)
DATABASE_URL=mssql://sa:password@localhost\\SQLEXPRESS/symfonydb

ここがみそだった。

.env.local (Windows下での見え方)
DATABASE_URL=mssql://sa:password@localhost¥¥SQLEXPRESS/symfonydb

Windows下ではバックスラッシュは¥マークに見えるんですが、入力の仕方で本当に¥になってる感じで、vendorvendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOSqlsrv\Driver.php を追ってみたら、バックスラッシュでなく??になっていた。

#####デバッグ情報

vendorvendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOSqlsrv\Driver.php(33..40) ここにdump()を仕込んだ
        // デバック用に1行追加
        dump($this->_constructPdoDsn($params, $dsnOptions)); 

        return new PDO\SQLSrv\Connection(
            $this->_constructPdoDsn($params, $dsnOptions), 
            $username,
            $password,
            $pdoOptions
        );

.env.local (Windowsでの見え方 正誤ともかわらない)
DATABASE_URL=mssql://sa:password@localhost¥¥SQLEXPRESS/symfonydb
Driver.php出力 (なんとなく¥マークをうった(誤))
Server=localhost??SQLEXPRESS;Database=symfonydb
Driver.php出力 (Macからバックスラッシュを打ちコピーした(正))
Server=localhost\\SQLEXPRESS;Database=symfonydb

###その他

doctrine設定にurl追加
config/packages/doctrine.yaml
doctrine:
    dbal:
        # configure these for your database server
        #driver: 'pdo_sqlsrv'
        #server_version: '5.7'
        #default_table_options:
        #    charset: utf8mb4
        #    collate: utf8mb4_unicode_ci

        # ここがなかったので追加した
        url: '%env(resolve:DATABASE_URL)%'
IIS PHP 7.4用のSQL Server Driver インストール

ドライバはいろいろあるが、、、

php_pdo_sqlsrv_74_nts_x64.dll
php_pdo_sqlsrv_74_nts_x32.dll
php_pdo_sqlsrv_74_ts_x64.dll
php_pdo_sqlsrv_74_ts_x32.dll
php_sqlsrv_74_nts_x64.dll
php_sqlsrv_74_nts_x32.dll
php_sqlsrv_74_ts_x64.dll
php_sqlsrv_74_ts_x32.dll

基本2つを選択して設定(コピー)する。
php7.4 64bit ノンスレッドセーフ
今回は上記なので、下記2本を PHPの入ってるフォルダのextへコピー(C:¥Program Files¥PHP¥v7.4¥ext)
php_pdo_sqlsrv_74_nts_x64.dll
php_sqlsrv_74_nts_x64.dll
Microsoft SQL Server 用 Drivers for PHP をダウンロードする

php.ini の設定

C:¥Program Files¥PHP¥v7.4¥php.ini

  • MSSQL Serverドライバーの追加
  • WARNINGはエラーとして通知しないように1行追加(DBを変更しただけでエラー?WARNING?が出たので)
php.ini (最後の行)
...
[ExtensionList]
extension=php_mysqli.dll
extension=php_mbstring.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_curl.dll
extension=php_exif.dll
extension=php_xmlrpc.dll
extension=php_openssl.dll
extension=php_soap.dll
extension=php_pdo_mysql.dll
extension=php_pdo_sqlite.dll
extension=php_imap.dll
extension=php_tidy.dll
extension=php_pdo_sqlsrv_74_nts_x64.dll  ;ここを追加(ノンスレッドセーフ)
extension=php_sqlsrv_74_nts_x64.dll      ;ここを追加(ノンスレッドセーフ)

[sqlsrv]                                 ;ここを追加
sqlsrv.WarningsReturnAsErrors = 0        ;ここを追加

sqlsrv.WarningsReturnAsErrorsについて

ドライバーの確認方法

毎回 NTS と TS のどっちをいれればいいか確認が持てなかった。
phpinfo();で確認できたのね。

public/phpinfo.php (このファイル作ってブラウザ(/phpinfo.php)で確認)
<?php
phpinfo();
Thread Safety	disabled

Thread Safety欄で disabled ならNTS、enableならTSドライバを使えばよかった。
ちなみに32bitか64bitはマイコンコンピュータのプロパティ等で確認忘れずに。

PHP 7.4

php 7.4はWeb Platform Installerで入れました。
うるおぼえですが、
SQL Driver もWeb Platform Installerで入れたのですが、うまく入らず上記でいれました。もしかしたら本当はちゃんとはいるのかも、、、

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?