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

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

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

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

SQL Server Reporting Services

SQL Server Reporting Services (SSRS)はMicrosoftが開発したサーバベースのレポートジェネレータです。組織的なレポートの作成、配置、管理に役立てることのできるツールやサービスが豊富に用意されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2785閲覧

MacOSでSQLServerに接続しようとするとエラー"could not find driver"が発生し、接続できません。

y_____

総合スコア3

SQL Server

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

SQL Server Reporting Services

SQL Server Reporting Services (SSRS)はMicrosoftが開発したサーバベースのレポートジェネレータです。組織的なレポートの作成、配置、管理に役立てることのできるツールやサービスが豊富に用意されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/01/30 14:32

編集2022/02/02 13:00

前提・実現したいこと

Microsoftのドキュメントを見ながら作業していたのですが、一番最後のインストールテストで以下のようなエラーが発生し接続ができません。

どなたか解決方法を教えていただけないでしょうか?

発生している問題・エラーメッセージ

Caught PDO exception: could not find driver PHP Info for troubleshooting

該当のソースコード

php

1<?php 2try { 3 $serverName = "yourServername"; 4 $databaseName = "yourDatabase"; 5 $uid = "yourUsername"; 6 $pwd = "yourPassword"; 7 8 $conn = new PDO("sqlsrv:server = $serverName; Database = $databaseName;", $uid, $pwd); 9 10 // Select Query 11 $tsql = "SELECT @@Version AS SQL_VERSION"; 12 13 // Executes the query 14 $stmt = $conn->query($tsql); 15} catch (PDOException $exception1) { 16 echo "<h1>Caught PDO exception:</h1>"; 17 echo $exception1->getMessage() . PHP_EOL; 18 echo "<h1>PHP Info for troubleshooting</h1>"; 19 phpinfo(); 20} 21 22?> 23 24<h1> Success Results : </h1> 25 26<?php 27try { 28 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 29 echo $row['SQL_VERSION'] . PHP_EOL; 30 } 31} catch (PDOException $exception2) { 32 // Display errors 33 echo "<h1>Caught PDO exception:</h1>"; 34 echo $exception2->getMessage() . PHP_EOL; 35} 36 37unset($stmt); 38unset($conn); 39?>

試したこと

php.iniの
;extension=pdo_mysql
;extension=mysql
をコメントアウト

httpd.confの
ServerNameを 'www.example.com:8080'から'ServerName localhost:8080' に変更

補足情報(FW/ツールのバージョンなど)

ドライバーはインストールしています。

Warning: microsoft/mssql-release/msodbcsql17 17.8.1.1 is already installed and up-to-date. To reinstall 17.8.1.1, run: brew reinstall msodbcsql17

イメージ説明

参考にした記事

Microsoft ODBC Driver for SQL Server をインストールする (macOS)

PHPからMySQL 8.0へPDOで接続時に[could not find driver]になる場合の対処法

PHPでMySQLなどにPDO接続をすると、could not find driverのエラーが出る場合

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

試してないですが、macOS から SQL Server に接続する場合、
Microsoft ODBC Driver for SQL Server 」の他に「Microsoft SQL Server 用 PHP ドライバー」(pdo_sqlsrv)が必要なのではないでしょうか?

■ 手順 3. Microsoft SQL Server 用 PHP ドライバーをインストールする (macOS)
https://docs.microsoft.com/ja-jp/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver15#step-3-install-the-php-drivers-for-microsoft-sql-server-macos

pdo_mysql は「MySQL 用」の PHP ドライバーで「SQL Server」とは別のデータベースです。

投稿2022/01/30 14:54

cx20

総合スコア4646

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_____

2022/02/02 13:06

回答ありがとうございます。 pdo_sqlsrvはダウンロードされていますが、上記のエラーが発生しています。
cx20

2022/02/02 15:02

pdo_sqlsrv が PHP 拡張モジュールとして正しくインストールされていないように思います。 下記の確認手順を試してもらえますか? ■ PHP 拡張モジュールの確認方法 1. php.ini の場所を確認 コマンド)php --ini 2. php.ini の中から extension_dir の内容を確認 3. extension_dir のパスに 下記ファイルがあることを確認 sqlsrv.so pdo_sqlsrv.so 4. pdo_sqlsrv の設定確認 コマンド)php --ri sqlsrv コマンド)php --ri pdo_sqlsrv → 設定値が表示されることを確認
y_____

2022/02/03 11:40

ありがとうございます。 確認しました。 1.php --iniの場所 Configuration File (php.ini) Path: /usr/local/etc/php/8.0 Loaded Configuration File: /usr/local/etc/php/8.0/php.ini Scan for additional .ini files in: /usr/local/etc/php/8.0/conf.d Additional .ini files parsed: /usr/local/etc/php/8.0/conf.d/ext-opcache.ini 2. php.ini の中から extension_dir の内容を確認 extension_dir ="/usr/local/lib/php/pecl/20200930" 3. extension_dir のパスに 下記ファイルがあることを確認 sqlsrv.so pdo_sqlsrv.so いずれもありました。 4. pdo_sqlsrv の設定確認 コマンド)php --ri sqlsrv 結果 sqlsrv sqlsrv support => enabled ExtensionVer => 5.10.0 Directive => Local Value => Master Value sqlsrv.WarningsReturnAsErrors => On => On sqlsrv.LogSeverity => 0 => 0 sqlsrv.LogSubsystems => 0 => 0 sqlsrv.ClientBufferMaxKBSize => 10240 => 10240 sqlsrv.SetLocaleInfo => 2 => 2 (base) yoshikioritani@ysk ~ % php --ri pdo_sqlsrv コマンド)php --ri pdo_sqlsrv 結果 pdo_sqlsrv pdo_sqlsrv support => enabled ExtensionVer => 5.10.0 Directive => Local Value => Master Value pdo_sqlsrv.log_severity => 0 => 0 pdo_sqlsrv.client_buffer_max_kb_size => 10240 => 10240 pdo_sqlsrv.report_additional_errors => 1 => 1 pdo_sqlsrv.set_locale_info => 2 => 2 (base) yoshikioritani@ysk ~ % php --ini Configuration File (php.ini) Path: /usr/local/etc/php/8.0 Loaded Configuration File: /usr/local/etc/php/8.0/php.ini Scan for additional .ini files in: /usr/local/etc/php/8.0/conf.d Additional .ini files parsed: /usr/local/etc/php/8.0/conf.d/ext-opcache.ini PHPinfoでは PHP Version 7.4.27となっているのですが、1.がverasion8.0となっていることが原因でしょうか?
cx20

2022/02/03 11:46

> PHP Version 7.4.27となっているのですが、1.がverasion8.0となっていることが原因でしょうか? そうですね。それであれば違うバージョンのPHPが動いてそうですね・・
y_____

2022/02/03 11:49

【補足】 httpd.comf設定) LoadModule php7_module /usr/local/Cellar/php@7.4/7.4.27/lib/httpd/modules/libphp7.so <FilesMatch .php$> SetHandler application/x-httpd-php </FilesMatch> php7.4のphp.iniの設定 extension="pdo_sqlsrv.so" extension="sqlsrv.so" extension_dir ="/usr/local/lib/php/pecl/20200930"
y_____

2022/02/03 12:26 編集

phpのバージョンを7.4に切り替えましたが、下記エラーが発生しております。 コマンド)php --ini PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlsrv.so' (tried: /usr/local/lib/php/pecl/20200930/pdo_sqlsrv.so (dlopen(/usr/local/lib/php/pecl/20200930/pdo_sqlsrv.so, 9): Symbol not found: __call_user_function_impl Referenced from: /usr/local/lib/php/pecl/20200930/pdo_sqlsrv.so Expected in: flat namespace in /usr/local/lib/php/pecl/20200930/pdo_sqlsrv.so), /usr/local/lib/php/pecl/20200930/pdo_sqlsrv.so.so (dlopen(/usr/local/lib/php/pecl/20200930/pdo_sqlsrv.so.so, 9): image not found)) in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlsrv.so' (tried: /usr/local/lib/php/pecl/20200930/pdo_sqlsrv.so (dlopen(/usr/local/lib/php/pecl/20200930/pdo_sqlsrv.so, 9): Symbol not found: __call_user_function_impl Referenced from: /usr/local/lib/php/pecl/20200930/pdo_sqlsrv.so Expected in: flat namespace in /usr/local/lib/php/pecl/20200930/pdo_sqlsrv.so), /usr/local/lib/php/pecl/20200930/pdo_sqlsrv.so.so (dlopen(/usr/local/lib/php/pecl/20200930/pdo_sqlsrv.so.so, 9): image not found)) in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'sqlsrv.so' (tried: /usr/local/lib/php/pecl/20200930/sqlsrv.so (dlopen(/usr/local/lib/php/pecl/20200930/sqlsrv.so, 9): Symbol not found: __call_user_function_impl Referenced from: /usr/local/lib/php/pecl/20200930/sqlsrv.so Expected in: flat namespace in /usr/local/lib/php/pecl/20200930/sqlsrv.so), /usr/local/lib/php/pecl/20200930/sqlsrv.so.so (dlopen(/usr/local/lib/php/pecl/20200930/sqlsrv.so.so, 9): image not found)) in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library 'sqlsrv.so' (tried: /usr/local/lib/php/pecl/20200930/sqlsrv.so (dlopen(/usr/local/lib/php/pecl/20200930/sqlsrv.so, 9): Symbol not found: __call_user_function_impl Referenced from: /usr/local/lib/php/pecl/20200930/sqlsrv.so Expected in: flat namespace in /usr/local/lib/php/pecl/20200930/sqlsrv.so), /usr/local/lib/php/pecl/20200930/sqlsrv.so.so (dlopen(/usr/local/lib/php/pecl/20200930/sqlsrv.so.so, 9): image not found)) in Unknown on line 0 Configuration File (php.ini) Path: /usr/local/etc/php/7.4 Loaded Configuration File: /usr/local/etc/php/7.4/php.ini Scan for additional .ini files in: /usr/local/etc/php/7.4/conf.d Additional .ini files parsed: /usr/local/etc/php/7.4/conf.d/ext-opcache.ini
y_____

2022/02/03 12:44

phpのバージョンを変えてドライバーを再インストールしたところエラーが解消されました! phpのバージョンが違ったためドライバーも違うバージョンがインストールされていたようです。 が、今度は SQLSTATE[HYT00]: [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired というエラーが発生しました。。。 解決方法を調べてみます!
cx20

2022/02/03 14:08

とりあえずドライバの問題は解消されたようで何よりです。
y_____

2022/02/04 02:00

親切に対応していただきましてありがとうふございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問