Как подключиться к именованному экземпляру с ODBC Driver 17 на PHP 7? - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь подключиться к базе данных MS SQL, которая является именованным экземпляром из моего linux-бокса, работающего на PHP 7.1.Я использую ODBC Driver 17 для SQL Server.

Я успешно установил драйвер ODBC от Microsoft и успешно подключился к базам данных, которые не являются именованными экземплярами.Для именованного экземпляра я перепробовал все возможные комбинации (с / без порта, кавычек, скобок и т. Д.)

//$host = 'mySVR-SQL'; // THIS WORKS
//$host = '10.10.10.12345'; // THIS ALSO WORKS
$host = "SERV\INSTANCE_NAME"; // THIS DOES NOT WORK
$host = "SERV\INSTANCE_NAME,1433"; // THIS DOES NOT WORK
$host = "[SERV\INSTANCE_NAME]"; // THIS DOES NOT WORK
$host = '123.12.34.56\INSTANCE_NAME'; // THIS DOES NOT WORK
$user = 'my_username';
$pass = 'my_password';
$db = 'my_database';

$conn = "odbc:DRIVER={ODBC Driver 17 for SQL Server};SERVER=$host;DATABASE=$db";

$db_c = new PDO($conn, $user, $pass);

//connection string without variables for troubleshooting
$db_c = new PDO("odbc:Driver={ODBC Driver 17 for SQL Server};Server=123.12.34.56\INSTANCE_NAME;Database=MyDatabase", "my_username", "my_password");

Это сообщение об ошибке, которое я получаю:

SQLSTATE[HYT00] SQLDriverConnect: 0 [unixODBC][Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired

Что я могу сделать для дальнейшего устранения этой проблемы?Обратите внимание, что я смог нормально подключиться до использования драйверов pdo_dblib на php 5.6.Но так как мы обновляемся до PHP 7, я решил, что нам следует использовать драйверы Microsoft (которые работают нормально, за исключением именованного экземпляра.)

Это работает (с использованием dblib):

$db_c = new PDO("dblib:host=123.12.34.56\INSTANCE_NAME;dbname=MyDatabase;charset=utf8", "my_username", "my_password");
...