it-swarm.com.ru

PHP Sql Server PDOException: не удалось найти драйвер

Мой сервер является сервером Windows 2008. PHP Версия 7.2.7 установлена ​​и работает. Sql Server 11 (64 бит) установлен и работает (есть пара приложений asp.net, которые уже работают и используют эту базу данных)

Я загрузил PHP Sql Server Drivers с веб-сайта Microsoft и поместил файлы .dll в каталог PHP ext. 

В моем PHP.ini я добавил: extension=php_pdo_sqlsrv_7_nts_x64

В моем файле .php, который я использую для проверки соединения с БД, у меня есть:

 $SqlServer = "THISSERVER\SQLEXPRESS";
 $SqlServerCon = new PDO("sqlsrv:server=$SqlServer;Database=TheDatabase", "DbUName", "DbPassword"); 
if (!$SqlServerCon) {die('Unable To Connect to Sql Server');}
else
{echo "Connection Successful";}     

Я получаю: PHP Fatal error: Uncaught PDOException: could not find driver in D:\Inetpub\wwwroot\TechStory2\DBtest.php:7 (строка 7 - это строка $ SqlServerCon). 

Что я сделал не так? и что мне нужно сделать, чтобы получить соединение с Sql Server? 

6
Soren

Я понял это. Мне пришлось установить драйвер ODBC 17 для SQL Server (msodbcsql_17.2.0.1_x64.msi) на моем сервере. Собственный клиент SQL Server 11.0 был установлен, но драйвер ODBC для SQL Server не установлен. 

Для использования в будущем для кого-либо еще с этой или подобной проблемой ...

Его можно загрузить по адресу https://www.Microsoft.com/en-us/download/details.aspx?id=56567 (примечание: если у вас 32-битный сервер, вам нужно установить msodbcsql_17 .2.0.1_x86.msi - Если вы случайно попытаетесь установить неправильную версию, она сообщит вам об этом во время установки). После установки драйвера необходимо перезагрузить сервер. Это не побудит вас перезагрузить, но вам нужно. 

В моем PHP.ini я добавил extension=php_pdo_sqlsrv_72_nts.dll и extension=php_sqlsrv_72_nts_x64.dll. Их можно скачать по адресу https://docs.Microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-. драйвер? view = sql-server-2017

Дополнительную информацию можно найти по адресу https://docs.Microsoft.com/en-us/sql/connect/php/loading-the-php-sql-driver?view=sql-server-2017 и https://docs.Microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-driver?view=sql-server-2017

Теперь я могу установить соединение с Sql Server, используя sqlsrv_connect или PDO. 

Проверка соединения с PDO:

$SqlServer = "THISSERVER\SQLEXPRESS";
$SqlServerCon = new PDO("sqlsrv:server=$SqlServer;Database=TheDatabase", "DbUName", "DbPassword"); 
if (!$SqlServerCon) {die('Unable To Connect to Sql Server');}
else
{echo "Connection Successful";} 

sqlsrv_connect test test:

$SqlServer = "THISSERVER\SQLEXPRESS";
$DbConnInfo = array( "Database"=>"TheDatabase", "UID"=>"DbUName", "PWD"=>"DbPassword");
$SqlServerCon = sqlsrv_connect( $SqlServer, $DbConnInfo);
if( $SqlServerCon ) {echo "Connection established";}
else
{echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));}
2
Soren

Как сказали комментаторы - добавление .dll в конце строки конфигурации extension= должно быть хорошим началом для вашей проблемы.

Я также вижу, что вы пытаетесь загрузить NTS-версию расширения (NTS означает не-потокобезопасный). Вы уверены, что собираетесь загрузить правильную версию расширения? Проверьте, работает ли PHP как среда выполнения NTS или нет - вы можете проверить это с помощью phpinfo();.

0
michail_w