簡體   English   中英

使用PDO_DBLIB連接到MS SQL數據庫的PHP錯誤

[英]PHP error connecting to MS SQL database using PDO_DBLIB

我試圖使用PHP的PDO_DBLIB驅動程序連接到遠程數據庫,並遇到一些問題。

數據庫可以使用telnet和SQL客戶端通過相同的環境進行連接。 但是,在PHP中使用以下代碼進行連接不起作用:

<?php
$conn = new PDO('dblib:dbname=TestDB;host=RemoteServer;charset=utf8', 'my_user', 'my_pass');

運行此代碼,無論是來自命令行還是Apache,都會產生以下錯誤:

致命錯誤:未捕獲異常'PDOException',消息'SQLSTATE [HY000]無法連接:Adaptive Server不可用或不存在(嚴重級9)'

我能夠在不同的Web服務器上使用相同的代碼連接到數據庫,這讓我相信這是一個配置問題。 兩台服務器上的php.ini文件看起來相對相同。 它們各自具有相同的PDO庫,並配置了相同的選項。

有誰知道為什么會發生這種情況?

事實證明這是一個比我想象的更簡單的問題。 無論出於何種原因,開發服務器沒有使用端口1433作為連接中的默認端口,而是使用端口4000。

我通過啟用freetds.conf文件中的日志並在我發出請求時監視它們來發現這一點。

另外,需要注意的事項:DBLIB擴展使用冒號(:)作為主機和端口之間的分隔符而不是逗號。 不幸的是,您使用逗號時收到的錯誤不是很具描述性,所以希望有人從這個發現中受益。

直接為此主機將端口寫入freetds.conf

[RemoteServer]
    host = RemoteServer
    port = 1433

並留下PHP代碼我們是:

$conn = new PDO('dblib:dbname=TestDB;host=RemoteServer;charset=utf8', 'my_user', 'my_pass');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM