Проблема в установке соединения между php8.3 и MSSQL

Не могу законнектить php с mssql. Выдает ошибку

 [php:error] [pid 9168:tid 1184] [client ::1:50414] PHP Fatal error:  Uncaught PDOException: could not find driver in C:\\Apache24\\htdocs\\mssql.php:5\nStack trace:\n#0 C:\\Apache24\\htdocs\\mssql.php(5): PDO->__construct()\n#1 {main}\n  thrown in C:\\Apache24\\htdocs\\mssql.php on line 5

скрипт подключения

$username = "myName";
$password = "MyPass";
$conn = new PDO("sqlsrv:Server=localhost;Database=MyDB", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo 'PDO SQL Server Connection successful</br>'; 

Версия SQL 16.0.1130.5 Версия PHP PHP Version 8.3.12

Драйвера лежат в папке ext в php, пробовал версию как thread safe так и not thread safe, конфиг php.ini

; On windows:
extension_dir="ext"
extension=php_sqlsrv_83_nts.dll
extension=php_pdo_sqlsrv_83_nts_x64.dll

ODBC установлен и расширение включено в php.ini

extension=odbc
extension=pdo_odbc

Веб сервер апач, ОС Windows 11

До этого всегда работал с mySql на линуксе, на винде все оказалось сложнее. Прошу в связке базы с php.


Ответы (1 шт):

Автор решения: Gloster

В общем путем проб и ошибок решил проблему, оказывается Windows не понимает относительные пути и в php.ini в секции ext нужно указать полный путь и путь к драйверам, вот такая конфигурация позволила загрузить драйвера корректно

extension_dir = "c:\Apache24\php\ext\"
extension=php_pdo_sqlsrv_83_ts_x64
extension=php_sqlsrv_83_ts_x64

причем тестировать модули(версия компиляции и т.д.) можно командой из командной строки такой как

C:\Apache24\php>php -d display_startup_errors=1 -d error_reporting=-1 -d display_errors -c "C:\Apache24\php\php.ini" -m

так вы сразу увидите те ли модули(версии) вы пытаетесь загрузить.

→ Ссылка