LoginSignup
2
1

More than 1 year has passed since last update.

PHP SQLServer PDO接続できなくハマッた件

Last updated at Posted at 2023-04-15

はじめに

SQLServerにあるテーブルをWeb上で閲覧できるようにしたいため、PHPで実装することになった。
環境は以下の通り。ASP.NETのほうがMSの親和性の恩恵で実装しやすい?と思うけど、私の好みで敢えてPHPを選択。

環境

  • OS: Windows Server 2019 Standard
  • DB: SQL Server 2014 Standard
  • Web: IIS, PHP Ver8.2.5

ドライバーインストール、phpinfoでドライバ認識確認まで順調で、いざPDO接続のコードを実装してページを読み込んでみたら

HTTP 500 Error

この Internal Server Error の解決までをここに綴る。

PDOエラー処理

PHP公式マニュアルによるとPDOが提供するエラー処理方法は三通り存在し、アプリケーションの開発形態によって使い分けるとのこと。
https://www.php.net/manual/ja/pdo.error-handling.php

今回はVer8.2.5を使用しているからPDO::ERRMODE_EXCEPTION モードを指定してエラー処理を実装する。

<?php
    $serverName = 'SeverName';
    $database = 'dbName';
    $uid = 'sa';
    $pwd = '####SA##PASSWORD';
    try {
      $conn = new PDO("sqlsrv:server=$serverName;Database = $database", $uid, $pwd);
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
      die("Error connecting to SQL Server:{$e}");
    }
?>

上記実装し、ページを読み込んだところ以下エラーが表示された。
※以下よりコードSampleを参照
https://www.ipentec.com/document/php-mssql-connect

SSL プロバイダー: 信頼されていない機関によって証明書チェーンが発行されました。

またしてもTLSエラー、、😓 ※私の投稿はTLSエラーが多いTT

DSNに"TrustServerCertificate=1"を追加

上記エラーをみると恐らくPHPが証明書ストアのルート証明書を参照できないためかと思われる。強制的にサーバー証明書を信頼させるためには DSNに"TrustServerCertificate"を追加する。
https://www.php.net/manual/ja/ref.pdo-sqlsrv.connection.php

<?php
    $serverName = 'SeverName';
    $database = 'dbName';
    $uid = 'sa';
    $pwd = '####SA##PASSWORD';
    try {
      $conn = new PDO("sqlsrv:server=$serverName;Database= $database;TrustServerCertificate=1;", $uid, $pwd);
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
      die("Error connecting to SQL Server:{$e}");
    }
?>

これで Internal Server Error が解消された😇

2
1
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
2
1