在研究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 資料夾下面.
PHP versionThread SafeFreeTDS versionDownload URLPHP 5.2.x (vc6)Yes0.82 + 20090302 patchesDownload!No0.82 + 20090302 patchesDownload!PHP 5.3.x (vc9)Yes0.82 + 20090904 patchesDownload!No0.82 + 20090904 patchesDownload!PHP 5.4.x (vc9)Yes0.82 + 20110906 patchesDownload! FTP Download!No0.82 + 20110906 patchesDownload! FTP Download!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://www.php.cn/进行测试
<?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); ?>
以上就是php连接微软MSSQL(sql server)完全攻略 的内容,更多相关内容请关注PHP中文网(www.php.cn)!