iT邦幫忙

0

iis+php+mssql

請問各位大大,我想架設 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,但不知道是否正確,結果於下圖
https://ithelp.ithome.com.tw/upload/images/20190719/20116916rF9HHoz9gq.jpg

測試連接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天還是沒結果

froce iT邦大師 6 級 ‧ 2019-07-19 14:49:49 檢舉
你要不要先切換OS到英文下去執行?重要的訊息都被亂碼遮住了...
bojing iT邦新手 5 級 ‧ 2019-07-19 16:16:43 檢舉
好的 謝謝大大
0
kyoe
iT邦新手 5 級 ‧ 2019-07-22 10:59:55
最佳解答
  1. 不要使用 windows user 連線, 改用帳號密碼登入
    安全性 > 登入 > 新增登入 > 記得設定[使用者對應]的資料庫
  2. 因為是連本機 127.0.0.1 所以不需要開 port 跟防火牆
  3. google 搜尋 php sqlsrv mssql 可以得到詳細說明的教學
  4. php.ini 記得加入 extension=php_pdo_sqlsrv_73_nts_x64.dll(php7)

以上是最近在 php7 on windows server 2016 上實作的 php pdo mssql 步驟

bojing iT邦新手 5 級 ‧ 2019-07-23 15:13:20 檢舉

謝謝大大,正解,我改用這個方式就可以了

0
小魚
iT邦高手 1 級 ‧ 2019-07-19 14:47:41

sqlsrv_connect沒用過,
但是現在似乎都建議用PDO來連資料庫,
當然你需要載入相關的Extension,

正常來說要連資料庫需要有 host(IP或域名), port, 資料庫名稱, 帳號, 密碼.
但是除了一個資料庫名稱其他好像都沒看到,
而且你使用ServerName,
我不確定你有沒有開放SQL Server讓使用者能透過TCP/IP來連線了?

bojing iT邦新手 5 級 ‧ 2019-07-19 16:18:30 檢舉

SQL Server讓使用者能透過TCP/IP
是只電腦管理的那個?

小魚 iT邦高手 1 級 ‧ 2019-07-19 17:13:50 檢舉

我倒是沒用程式寫過Windows認證,
如果要用SQL認證,
可以搜尋一下 MS-SQL SQL登入

bojing iT邦新手 5 級 ‧ 2019-07-23 15:09:34 檢舉

謝謝大大,我解決拉,我用別的認證方式就行了

2
dragonH
iT邦高手 1 級 ‧ 2019-07-19 15:05:48

鍵盤解題

撇除編碼問題

看到一堆 AUTHORITY

先猜認證沒過

先確認你的 database 有打開

在確認你的連接資訊是否正確

然後你的

$connectionInfo = array( "Database"=>"test");

只有 database name

就算真的不需要密碼

user name 之類的 我猜應該還是會需要吧

然後也可以去 google

mssql code 18456 

看找到的方法能不能解決你的問題

看更多先前的回應...收起先前的回應...
froce iT邦大師 6 級 ‧ 2019-07-19 15:15:00 檢舉

NT AUTHORITY\IUSR應該是用這個使用者去pass連線認證,有可能把他加入test這資料庫就行。
但是我還是建議把OS開到英文的,你不會知道你還會遇到什麼錯誤。
或者先把cmd切換到UTF-8看看

chcp 65001

https://blog.darkthread.net/blog/command-prompt-codepage/

dragonH iT邦高手 1 級 ‧ 2019-07-19 15:27:53 檢舉

其實我也是瞎猜的XD/images/emoticon/emoticon07.gif

總之

像 froce大 說的

讓 cmd 正確顯示訊息應該會很有幫助

因為你以後一定還會在遇到問題

bojing iT邦新手 5 級 ‧ 2019-07-19 16:27:05 檢舉

若用windows驗證登入,username是下圖的使用者名稱嗎?
https://ithelp.ithome.com.tw/upload/images/20190719/20116916h2Dd724Kmm.jpg

密碼就空白?

dragonH iT邦高手 1 級 ‧ 2019-07-19 16:35:52 檢舉

username 好像是另一個驗證才需要

抱歉我上面誤導了

參考

阿你這使用者確定可以連線嗎

fillano iT邦超人 1 級 ‧ 2019-07-19 17:47:34 檢舉

https://docs.microsoft.com/zh-tw/sql/connect/php/download-drivers-php-sql-server?view=sql-server-2017

我記得自己之前都是用這個Driver來連,不是ODBC Driver,不過因為我都是透過tcp來連線,所以SQLServer也需要設定好。用tcp連線時,使用的是資料庫的帳號而不是OS帳號。這可能更你的需求不一樣,不過這樣才可能控管連線帳號的權限。

bojing iT邦新手 5 級 ‧ 2019-07-23 15:08:15 檢舉

謝謝大大分享,我放棄windows驗證的連接方式了,可以連上了,在SQL server 新增使用者,在打相關資訊就OK囉

0
vegalou
iT邦新手 4 級 ‧ 2019-07-19 22:00:25

回想起以前開發專案的老問題。

PHP要連 MSSQL 喔,只有一個辦法,才沒有亂碼的問題,上面都不是正面解法。

很怪吧,就算你裝 MS 的 MS_PHP_DRV 也是不行。

bojing iT邦新手 5 級 ‧ 2019-07-23 15:11:18 檢舉

我用windows驗證試到頭痛

0
ray060210
iT邦新手 5 級 ‧ 2019-07-22 11:59:51

1.iis 一定要有 wpi 安裝 php 套件,基本上裡面就會有 pdo_srv ,如果沒有要去下載門神大大的link,在放在指定的子夾,更改 php.ini 並重啟 iis .

2.mssql 我是使用tcp去連線的,所以要先開啟 mssql 的 tcp 通道服務. 然後 mssql要開啟 windows 授權模式的另一個, 我記得應該是 sql server 授權的方式,不只帳號裡面要開,最外面大台服務也要開.

3.測試的時候可以用 ssms 用 ip 連線看看,如果可以連上應該php就可以連得上.

4.如果是不同台主機的話,要開啟防火牆.

bojing iT邦新手 5 級 ‧ 2019-07-23 15:15:00 檢舉

感謝大大分享,我之後來測試不同主機連線看看,我在本機可以連上了

我要發表回答

立即登入回答