請問各位大大,我想架設 iis server + php + mssql
環境是 OS:win10 php版本:7.1.30 mssql版本是 14.0
用PHP連接mssql的時候一直連不上,出現以下訊息
Connection could not be established.
Array ( [0] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]�ϥΪ� 'NT AUTHORITY\IUSR' ���n�J���ѡC [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]�ϥΪ� 'NT AUTHORITY\IUSR' ���n�J���ѡC ) [1] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]�ϥΪ� 'NT AUTHORITY\IUSR' ���n�J���ѡC [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]�ϥΪ� 'NT AUTHORITY\IUSR' ���n�J���ѡC ) )
然後我有安裝ODBC 17,但不知道是否正確,結果於下圖
測試連接mssql的程式碼
$serverName = "DESKTOP-96U7FIF"; //serverName\instanceName
// Since UID and PWD are not specified in the $connectionInfo array,
// The connection will be attempted using Windows Authentication.
$connectionInfo = array( "Database"=>"test");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "Connection established.";
}else{
echo "Connection could not be established.";
die( print_r( sqlsrv_errors(), true));
}
想請各位高手能幫幫我,這問題已經搞了2天還是沒結果
以上是最近在 php7 on windows server 2016 上實作的 php pdo mssql 步驟
sqlsrv_connect沒用過,
但是現在似乎都建議用PDO來連資料庫,
當然你需要載入相關的Extension,
正常來說要連資料庫需要有 host(IP或域名), port, 資料庫名稱, 帳號, 密碼.
但是除了一個資料庫名稱其他好像都沒看到,
而且你使用ServerName,
我不確定你有沒有開放SQL Server讓使用者能透過TCP/IP來連線了?
鍵盤解題
撇除編碼問題
看到一堆 AUTHORITY
先猜認證沒過
先確認你的 database 有打開
在確認你的連接資訊是否正確
然後你的
$connectionInfo = array( "Database"=>"test");
只有 database name
就算真的不需要密碼
user name 之類的 我猜應該還是會需要吧
然後也可以去 google
mssql code 18456
看找到的方法能不能解決你的問題
NT AUTHORITY\IUSR應該是用這個使用者去pass連線認證,有可能把他加入test這資料庫就行。
但是我還是建議把OS開到英文的,你不會知道你還會遇到什麼錯誤。
或者先把cmd切換到UTF-8看看
chcp 65001
其實我也是瞎猜的XD
總之
像 froce大 說的
讓 cmd 正確顯示訊息應該會很有幫助
因為你以後一定還會在遇到問題
若用windows驗證登入,username是下圖的使用者名稱嗎?
密碼就空白?
1.iis 一定要有 wpi 安裝 php 套件,基本上裡面就會有 pdo_srv ,如果沒有要去下載門神大大的link,在放在指定的子夾,更改 php.ini 並重啟 iis .
2.mssql 我是使用tcp去連線的,所以要先開啟 mssql 的 tcp 通道服務. 然後 mssql要開啟 windows 授權模式的另一個, 我記得應該是 sql server 授權的方式,不只帳號裡面要開,最外面大台服務也要開.
3.測試的時候可以用 ssms 用 ip 連線看看,如果可以連上應該php就可以連得上.
4.如果是不同台主機的話,要開啟防火牆.