无法用PHP连接到SQL Server

9

连接到 sqlsrv 字符串无法工作。

$login = new PDO("sqlsrv:server=MYSQLSERVER\SQLEXPRESS;Database=db_name", "user", "passw");

我遇到了错误信息:

Fatal error: Invalid handle returned

我非常确定登录详情是正确的,因为在其他项目中它可以工作。这可能是因为PHP 7的问题吗?


请先确认以下几点:由于这是一个命名实例,是否使用了动态端口,而这些端口被本地防火墙阻止了?此外,请注意,默认情况下 SQL Express 并未启用 TCP 连接。 - Paul Andrew
我正在使用适当的SQL服务器,但这个名称仅用于说明。而且我刚刚发现有时可以工作,有时会返回错误... - Klapsius
你安装了哪个版本的SQLSRV库?稳定版本不支持PHP/7,你需要从GibHub仓库获取夜间版本。 - Álvaro González
@ÁlvaroGonzález 4.0.4 可从 https://github.com/Azure/msphpsql/releases 下载。 - Klapsius
@Klapsius 我也遇到了同样的问题,使用的是php7、IIS和MSSQL 2012...你是如何解决的? - Simone Pessotto
@Klapsius,你看过这个吗:http://www.easysoft.com/developer/languages/php/sql_server_unix_tutorial.html。驱动程序是关键点,你的连接字符串看起来不错,但你没有引用一个可用的驱动程序。 - GoldBishop
4个回答

18

如何使用它? - Er.KT

3

2

虽然ODBC应该可以用于创建到MSSQL服务器的连接,但SQLSRV也应该可以使用。这篇MSDN文章很好地阐述了ODBC与SQLSRV之间的区别。您提供的PHP答案只是给出了一个使用ODBC连接到MSSQL的示例,这不是唯一的方法。 - afeique
这里有一个使用PDO和SQLSRV驱动程序的PHP示例:https://learn.microsoft.com/en-us/sql/connect/php/example-application-pdo-sqlsrv-driver。 - afeique
1
@afeique,抱歉我尽可能保持与Web服务器的一致性。无论哪种情况,您都将mssqlsqlsrv前缀与odbc混淆了。我发现有时最好将其简化为已确认的设计,如果这样可以工作,则添加更多复杂性以找到“why”。本质上,清除最小执行模式以进行验证。 - GoldBishop
感谢@GoldBishop的回复。我同意您减少到一个可行设计的推理。我的评论是为了澄清您的措辞,而不是您的逻辑或信息:听起来像是您暗示ODBC是唯一的方法,尽管我确定这不是您的意图。我不认为我将不同的驱动程序类型与ODBC混淆,因为我已经专门使用ODBC与MSSQL/Express服务器进行交互,但我相信这并不重要。 - afeique
顺便说一句,我提供的文档不是针对你的,而是作为其他人的补充资源。 - afeique
1
@afeique,你很棒...我想确保他们不会将ODBC前缀与MSSQL混淆。他们真的需要简化连接数据库时使用的协议。这就像“狮子、老虎和熊,哦我的天”情景一样。 - GoldBishop

0

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接