[英]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.