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

##環境
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()を仕込んだ
        // デバック用に１行追加
        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 ノンスレッドセーフ```
今回は上記なので、下記２本を 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 をダウンロードする](https://docs.microsoft.com/ja-jp/sql/connect/php/download-drivers-php-sql-server?view=sql-server-2017)


##### 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について](https://docs.microsoft.com/ja-jp/sql/connect/php/how-to-configure-error-and-warning-handling-using-the-sqlsrv-driver?view=sql-server-2017 "Microsoft")


##### ドライバーの確認方法
毎回 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で入れたのですが、うまく入らず上記でいれました。もしかしたら本当はちゃんとはいるのかも、、、