在研究ezSQL的時候就看到了mssql_connect()等一些php提供的連接MSSQL的函數,本以為php這個開源的風靡世界的編程語言對連接微軟的數據應該是不在話下的,但是到真正執行的時候,才發現困難多多。
一開始我下載的php版本是5.93的,下載下來添加環境變量等等搞了半天後,phpinfo()這個函數終於成功的運行在浏覽器中了。然後當我在滿世界的找php_mssql.dll,才發現在5.3以及以上版本的php中已經不是原生態的支持mssql了。
好不容易找到了微軟Microsoft Drivers 3.0 for PHP for SQL Server,心想微軟的東西應該做的可以,卻無奈的發現SQLSRV30.EXE沒有辦法運行:“SQLSRV30.EXE 不是有效的win32程序”。
在網上搜索了半天,總結了以下一些可行的辦法,但是在這之前你需要:
配置MICROSOFT SQL SERVER
1、下載並安裝sql server。現在這個版本就比較多了從2000 到2008不等,找一個你自己下載吧。
2、開放tcp/ip連接方式,使得數據庫能夠遠程訪問。SQL Server Configuration Manager -> Network Configuration -> Protocols -> TCP/IP enabled
3、打開數據管理界面,添加用戶和數據庫。
4、安裝php和配置IIS服務。
5、打開php所在文件夾裡面的 php.ini文件,並添加:
mssql.textlimit = 20971520 mssql.textsize = 20971520
做完了這些之後,你可以按照下面三種方法來連接數據庫了:
使用php自帶的方法連接MSSQL(5.3及以後版本不適用)
確保php ext擴展庫文件夾下有php_mssql.dll,然後在PHP.ini中的配置中,將
;extension=php_mssql.dll
前面的“;”去掉。
然後你可以測試連接了:
//連接MSSQL $conn=mssql_connect("實例名或者服務器IP","用戶名","密碼"); //測試連接 if($conn) { echo "連接成功"; }
Microsoft Drivers for SQL Server for PHP
2008年7月微軟發布了一個新的為php連接SQL Server的驅動,它改善了php自帶的連接MSSQL函數的一些缺點,並且是以php擴展插件的形式開發的,通過它你可以用php輕松的讀寫微軟的數據庫了。
如果你服務器使用的是IIS的話,那麼就一定要從這裡去下載:
http://php.iis.net/
因為從上述鏈接進去其實是微軟整合的網絡開發平台,只提供在線安裝,但是很方便的整合了PDO插件和php,當然還有微軟的其它一些開發功能,但是如果你沒需要,你可以不裝了,那些是在visual studio中的。
但是如果你用的是 Apache的話,你可以去這裡直接下載這個插件了,它其實是一個解壓文件,解壓出來幾個DLL文件,具體操作如下:
1)下載驅動包:http://www.microsoft.com/en-us/download/details.aspx?id=20098.
2)將DLL文件解壓到 PHP extension_dir 目錄,如果出現說SQLSRV30.EXE 不是有效的win32程序,可能是缺少某些庫,可能是vc10,也有可能是沒有用administrator權限運行。
extension_dir = “C:\PHP\ext”
3)在php.ini配置文件內引用相應的動態鏈接庫文件
extension=php_sqlsrv_52_ts_vc6.dll
extension=php_pdo_sqlsrv_52_ts_vc6.dll
extension=php_pdo.dll
其中的52、53表示就是php的5.2.x和5.3.x 版本,選擇跟你php版本相匹配的;
選擇vc6或vc9的主要看你使用的是什麼web服務器軟件,如果使用的是IIS那就選擇vc9的,如果是Apache則選擇vc6的。
至於ts和nts,就要看你安裝的php版本是線程安全版的還是非線程安全版,ts是線程安全,nts是非線程安全。
4)重啟Apache
5)連接數據庫
測試連接代碼:
<?php //本地測試的服務名 "(local)"; //使用sql server身份驗證,參數使用數組的形式,一次是用戶名,密碼,數據庫名 //如果你使用的是windows身份驗證,那麼可以去掉用戶名和密碼 $connectionInfo = array( "UID"=>"root", "PWD"=>"root2010", "Database"=>"master"); $conn = sqlsrv_connect( $serverName, $connectionInfo); if( $conn ) { echo "Connection established.\n"; } else { echo "Connection could not be established.\n"; die( print_r( sqlsrv_errors(), true)); } ?>
在windows下使用FreeTDS
什麼是FreeTDS? FreeTDS其實就是一個開源(或者可以說成自由)的C程序庫,它可以實現在Linux系統下訪問操作微軟的SQL數據庫。可以用在Sybase的db-lib或者ct-lib庫,在裡面也包含了一個ODBC的庫。允許許多應用軟件連接到Sybase或者微軟的SQL服務器。FreeTDS是以源碼的現實發布的,正因為是這樣,所以它幾乎可以在任何系統中進行編譯安裝。
如如你的服務器是Windows系統, 那麼你應該使用 php_dblib.dll。(more information on Using FreeTDS for Unix.)
通常我們可以在這個網站上找到這些DLL文件- Frank Kromann's site, 但是它基本上很多都已經過時了,並且會引發很多的問題,因此我們推薦windows下使用PHP 5.2.x版本,並且看看下面的建議 :
1. 按照下面的表格來下載 php_dblib.dll 並且將其保存到 /PHP/ext 文件夾下面.
2、 FreeTDS 需要安裝 .NET Framework v1.1 ,你可以到微軟的網站去下載。或者你去Frank's site 下載需要的DLL文件,並保存到你的/PHP根目錄下面。
3、在php配置文件 /PHP/php.ini 中添加:
extension=php_dblib.dll
4、當php引擎啟動FreeTDS模塊的時候需要傳遞一些信息,使得FreeTDS能夠連接到它的默認的數據庫。因此它的需要在freetds.conf中定義數據庫連接的基本信息,該文件在其根目錄下,可以按照你的情況來進行修改:
[global]
host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)
port = 1433
client charset = UTF-8
tds version = 8.0
text size = 20971520
5、創建config.php文檔來定義數據庫連接參數:
$CFG->dbtype = 'mssql'; // Required $CFG->dbhost = 'localhost'; // assuming MS SQL is on the same server, otherwise use an IP $CFG->dbname = 'moodle'; // or whatever you called the database you created $CFG->dbuser = 'yourusername'; // I usually use the 'sa' account (dbowner perms are enough) $CFG->dbpass = 'yourpassword'; $CFG->dbpersist = false; $CFG->prefix = 'mdl_'; //Prefix, you can change it, but NEVER leave it blank.
6、 重啟你的網站,如果還是沒有連接到你的數據庫的話,在 /PHP/php.ini文件中將display_startup_errors改為"On",當你解決了這些問題之後再將錯誤報告改為“Off”;
7、測試你的網站,建立test.php文件,代碼如下,訪問http://localhost/test.php進行測試
<?php $link = mssql_connect('localhost', 'db_user', 'db_password'); if(!$link) { echo'Could not connect'; die('Could not connect: ' . mssql_error()); } echo'Successful connection'; mssql_close($link); ?>
好了windows下使用FreeTDS網上的資料一大堆就不再講了,至此,此篇日志結束。