sql-server - 如何在 PHP 7 上使用 ODBC Driver 17 连接到命名实例?

标签 sql-server odbc php-7.1

我正在尝试从运行 PHP 7.1 的 Linux 机器连接到一个命名实例的 MS SQL 数据库。我正在为 SQL Server 使用 ODBC Driver 17。

我已成功安装 Microsoft 的 ODBC 驱动程序并成功连接到非命名实例的数据库。对于命名实例,我已经尝试了所有我能想到的组合(带/不带端口、引号、括号等)

//$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

如何进一步解决此问题?请注意,在 php 5.6 上使用 pdo_dblib 驱动程序之前,我能够正常连接。但是由于我们要升级到 PHP 7,我认为我们应该使用 Microsoft 驱动程序(它工作正常,除了命名实例。)

这确实有效(使用 dblib):

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

最佳答案

对于具有命名实例和自定义端口的 MS SQL 数据库,这将起作用:

new \PDO("sqlsrv:Server=IP_ADDRESS\\INSTANCE_NAME,CUSTOM_PORT;Database=DATABASE_NAME", "my_username", "my_password");

您需要使用 2 个反斜杠来转义反斜杠。如果有自定义端口,您需要将其包含在连接字符串中。

关于sql-server - 如何在 PHP 7 上使用 ODBC Driver 17 连接到命名实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54030009/

相关文章:

sql-server - 请求的 ODBC 记录

mysql - 导入 sql db 后,在本地更新/配置并运行 laravel 项目?

mysql - 如何在 Symfony 3 中使用 Doctrine 在类型 "json_array"的列上添加复合索引?

sql - 是什么导致了这些看似不一致的查询结果?

SQL 条件并集

sql-server - 如何防止 SQL Server 连接具有相同名称的 XML 结果

php - 从 PHP 闭包中读取 "this"和 "use"参数

c# - 是否可以将 DataTable 传递给 Entity Framework 中的临时 sql 查询?

sql-server - Access 从 SQL Server 截断我的 Decimal 值的链接表

c - SQL Server & ODBC 与 C 语言