PHP連線MSSQL資料庫案例,PHPWAMP多個PHP版本連線SQL Server資料庫
課前小知識普及:MSSQL和SQL Server是同一個軟體,叫法不同而已,MSSQL全稱是Microsoft SQL Server,MSSQL是簡寫,有些人則喜歡直接叫SQL Server,我就比較喜歡這種叫法,有韻味、、、
最近有使用者在使用PHPWAMP的時候,向我諮詢一個問題,就是關於PHP如何連線MSSQL資料庫。
平時我們搭建網站通常是PHP+Mysql資料庫,
不過在專案中,我們有時候必須要用到PHP+MSSQL資料庫,那應該怎麼辦呢?
本文案例採用的PHP整合環境是PHPWAMP8.1.8.8,目前最新版本是PHPWAMP_IN2,不管你用的是其他整合環境,還是自己安裝,操作方法都是一樣的,不過我還是建議大家使用我的這款PHPWAMP,我所整合的元件全是完整版,完美無錯省心省力,放在U盤隨時使用(支援自定義PHP版本,多版本同時執行)
其實早前我就有打算將MSSQL整個資料庫也綠化到PHP整合環境裡面,不用安裝直接使用。
不過MSSQL資料庫面對企業是收費的,所以我不敢將其綠化,萬一追究起來,我就懵逼了。
你們可以自己先安裝好資料庫後,按照我的方式去連線就可以了,後面我會詳細演示整個流程。
先來演示“本地測試時”常用的搭建方式,然後再演示網站在伺服器上正式運營的搭建方式。
其實沒啥區別,主要是演示常規用法以及站點管理裡面的用法,讓各位更加熟練的使用罷了。
先來給大家演示php5.3連線MSSQL資料庫的具體做法吧(資料庫是SQL Server 2008)
在PHPWAMP中,點這裡預設啟動的是php5.3,點選啟動(其他PHP版本請自行切換)
啟動後,點選此處瀏覽網站
在此頁面的最底部,點選“點選此處檢視phpinfo檔案”,檢視更加詳細的環境內容。
來到phpinfo檔案頁面,看到這裡的Thread Safety顯示的是enabled,
Thread Safety是執行緒安全的意思,而enabled是啟動的意思,說明目前是執行緒安全。
如果Thread Safety顯示的不是enabled,而是disabled,那麼就是非執行緒安全。
看圖片很明顯,目前是執行緒安全,而且是VC6
PHP5.3以上的版本,連線MSSQL資料庫不再是mssql.dll擴充套件,取而代之的是sqlsrv.dll擴充套件。
因為要選擇對應的驅動程式,所以要判斷是非執行緒安全還是執行緒安全,微軟公司提供了相關驅動,
用於PHP支援MSSQL資料庫。那麼我下面有這麼多版本的驅動,應該選哪個呢
剛才我們開啟的PHP版本是5.3,然後又是執行緒安全,而且phpinfo頁面顯示是VC6
所以要選擇的是php_pdo_sqlsrv_53_ts_vc6.dll和php_sqlsrv_53_ts_vc6.dll這兩個。
所以很多使用者說連線失敗,就是因為你選擇的驅動版本有問題,要對號入座才行。
開啟PHPWAMP版本檔案所在目錄。
來到對應的ext目錄,把php_pdo_sqlsrv_53_ts_vc6.dll和php_sqlsrv_53_ts_vc6.dll複製進去
這兩個驅動檔案一個是以pdo的方式連線,另一個則是以sqlsrv_connect的方式連線。
複製進去後如下圖所示。
好,接著下一步,開啟對應版本的PHP配置檔案
在開啟的php.ini檔案中
extension=php_sqlsrv_53_ts_vc6.dll
extension=php_pdo_sqlsrv_53_ts_vc6.dll
加入上面這兩行,然後搜尋“mssql.secure_connection”這一段內容,
將“mssql.secure_connection = Off”改為“mssql.secure_connection = On”
修改完成後,雙擊此處重啟當前apache伺服器即可。
重啟後,在phpinfo頁面如果能搜到sqlsrv,說明已經成功配置好了,如圖所示。
接下來我們來連線一下資料庫,看是否正常!
在測試資料庫之前,我們先來檢視一下資料庫埠號是多少,右鍵“新建查詢”
輸入exec sys.sp_readerrorlog 0, 1, 'listening' 然後右鍵點選執行。
發現埠號是預設的1433,這樣我們在連線資料庫的時候就不需要指定埠號了,
因為是預設埠,所有我們可以在PHP頁面可以這麼寫。程式碼隨便打打,證明能連線上就行了。
<?php
try {
$dbName = "sqlsrv:Server=127.0.0.1;Database=lccee"; //這裡是伺服器IP地址和資料庫名,埠不是預設的話記得改一下
$dbUser = "sa"; //使用者名稱
$dbPassword = "111111"; //登陸密碼
$db = new PDO($dbName, $dbUser, $dbPassword);
if ($db)
{
echo "恭喜你!資料庫連線成功了!!<br />";
}
}
catch (Exception $e){ echo "資料庫連線失敗!!"; }
?>
如果不是預設埠,假設是1688埠,那麼上面這一行就應該改為。
$dbName = "sqlsrv:Server=127.0.0.1,1688;Database=lccee";
當然,就算是預設埠,你也可以加上預設埠號,也是沒錯的,如下程式碼所示。
$dbName = "sqlsrv:Server=127.0.0.1,1433;Database=lccee";
易錯點:這裡的ip+埠,不是冒號!而是逗號,如果寫成“127.0.0.1:1433”是錯誤的!
好,我們開啟此頁面看看效果,執行程式碼提示連線成功,說明沒問題。
假設我把連線裡面的資料庫密碼改一下,再看,就提示失敗了,如下圖。
前面我們不是在php配置里加入了兩個DLL嗎,分別是
php_pdo_sqlsrv_53_ts_vc6.dll和php_sqlsrv_53_ts_vc6.dll
這兩個驅動檔案一個是以pdo的方式連線,另一個則是以sqlsrv_connect的方式連線。
而上面我們演示的連線方式是pdo,現在我們來用sqlsrv_connect的方式連線。
那麼程式碼可以這麼寫,建立一個sqlsrv_connect.php檔案,裡面寫上如下程式碼
<?php
$serverName = "NEPTUNE-PC"; //serverName\instanceName
$connectionInfo = array( "Database"=>"lccee", "UID"=>"sa", "PWD"=>"111111");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "連線成功<br />";
}else{
echo "連線失敗<br />";
}
?>
然後再測試看,也是連線成功了!
假如我把正確的密碼111111改成了錯誤的密碼888888,
(具體的資料庫密碼,看你自己的MSSQL資料庫,我的密碼是111111)
那麼就顯示連線錯誤了,把正確密碼改成錯誤以後,就顯示連線失敗了。
下面我們再改一下程式碼,讀取資料庫表裡的內容,這是我建立的資料庫,
資料庫名為Lccee,在這個資料庫裡面有個表叫phpwamp。
然後我隨便新增幾行程式碼,用來讀出資料表裡面的內容。
<?php
$serverName = "NEPTUNE-PC"; //serverName\instanceName
$connectionInfo = array( "Database"=>"lccee", "UID"=>"sa", "PWD"=>"111111");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "連線成功<br />";
}else{
echo "連線失敗<br />";
}
$query ="select * from phpwamp";
$result = sqlsrv_query($conn, $query);
while($row = sqlsrv_fetch_array($result)){
print_r($row);
echo "<br>";
}
?>
然後儲存,這時候我們再來看看,執行後就讀出這個資料表裡的內容了。
最後我們再演示一下,在伺服器上用站點管理建立的站點如何連線MSSQL資料庫。
開始我們的教程,第一步先把主介面修改成80埠,如下圖所示。
修改埠後切換到任意處在apache2.4之下的PHP版本,php5.5、php5.6、php7都可以。
然後開啟apache2.4站點管理,如下圖所示。
建立站點,如圖所示(Apache2.4站點管理可建立無數站點,每個站點可指定不同的PHP版本,也可以自定義設定PHP版本,還可以多個不同PHP版本同時執行,右鍵功能豐富)如圖下所示,我選的是php5.4這個版本,填寫完畢後點擊“新增站點”
新增後左側站點列表裡就會出現了新增的站點,右鍵站點選擇“生成此站hosts內容”
然後點選此處的按鈕去執行站點,如下圖紅色箭頭所示。
右鍵站點,選擇“域名瀏覽該網站”,就可以用域名瀏覽(在伺服器上再進行域名解析就可以了)
點選“域名瀏覽該網站”後,我們就可以看到這個頁面,如下圖所示。
滑鼠拉動滾動條往下看,在這裡點選檢視更加詳細的phpinfo()資訊。
可以看到在phpinfo檔案頁面,這裡的Thread Safety顯示的是enabled,
Thread Safety是執行緒安全,而enabled是啟動,那麼說明目前是執行緒安全。
目前的PHP版本是php5.4,所以我們應該選擇的兩個DLL檔案是
php_pdo_sqlsrv_54_ts.dll 和 php_sqlsrv_54_nts.dll,如下圖
和前面一樣把這兩個DLL複製到對應PHP版本的ext資料夾裡面。
這時候我們回到站點管理介面,右鍵站點開啟與之對應的php.ini配檔案。
在開啟的php.ini檔案中
extension=php_sqlsrv_54_ts.dll
extension=php_pdo_sqlsrv_54_ts.dll
加入上面這兩行,然後搜尋“mssql.secure_connection”這一段。
把“mssql.secure_connection = Off”改為“mssql.secure_connection = On”
修改後儲存,再次重啟Apache服務,建立一個sqlsrv_connect.php檔案,裡面寫上如下程式碼
<?php
$serverName = "NEPTUNE-PC"; //serverName\instanceName
$connectionInfo = array( "Database"=>"lccee", "UID"=>"sa", "PWD"=>"111111");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "連線成功<br />";
}else{
echo "連線失敗<br />";
}
$query ="select * from phpwamp";
$result = sqlsrv_query($conn, $query);
while($row = sqlsrv_fetch_array($result)){
print_r($row);
echo "<br>";
}
?>
然後瀏覽sqlsrv_connect.php檔案,就能讀出資料庫裡面的資訊了,如下圖
其他PHP版本也是一樣的道理,依樣畫葫蘆即可,相關DLL在這文章的附件裡面下載即可。
最新版PHPWAMP整合的php5.2、php5.3、php5.4、php5.5、php5.6、php7都已安裝了MSSQL資料庫擴充套件
友情提示:如在phpinfo頁面能搜到sqlsrv,但還是連不上資料庫,可以在下面連結下載ODBC驅動程式安裝。
以後如果時間允許,我也會考慮製作一個Linux下的PHPWAMP,應網友的要求,Mac系統的也在考慮,不過對Mac系統不是特別瞭解,需要一定時間研究研究,最近工作也挺忙的,一個人時間有限,估計進度會很慢。
後期我會在PHPWAMP版本里配置好各版本PHP與MSSQL的連線,到時你們就不用自己配置了
相關文章推薦: