mssql是sqlserver 的簡(jiǎn)稱(chēng)。這個(gè)是微軟的重型數(shù)據(jù)庫(kù)。
創(chuàng)新互聯(lián)建站于2013年開(kāi)始,先為上海等服務(wù)建站,上海等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為上海企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
我們查看php是否支持某項(xiàng)功能可以打開(kāi)配置文件,查看是否有該驅(qū)動(dòng)即可。
實(shí)際上php所有版本都支持sql server 。
只需要打開(kāi)php的配置文件,將以下代碼打開(kāi)注釋即可。
肯定可以啊 你買(mǎi)的是那種虛擬主機(jī)吧 估計(jì)是php+Mysql 的模式,他不提供sqlserver 當(dāng)然就連不上咯。
1:PHP5.2.x本身有個(gè)php_mssql.dll的擴(kuò)展用來(lái)連接Sql server,但是這個(gè)dll只是用來(lái)連接低版本 Sql server的(2000以下版本),在Sql server 2005及以上版本無(wú)法使用mssql_connect連接到數(shù)據(jù)庫(kù)。
2:php5.3.x不再支持php_mssql.dll 拓展庫(kù)了,及時(shí)使用php5.2.x中的php_mssql.dll也無(wú)法使用。 微軟專(zhuān)門(mén)為PHP出了個(gè)SQL Server的擴(kuò)展(Windows版本的),對(duì)于Windows下使用php開(kāi)發(fā)SQL Server應(yīng)用來(lái)說(shuō),這個(gè)擴(kuò)展有利于利用SQL Server來(lái)開(kāi)發(fā)php平臺(tái)連接sql server數(shù)據(jù)庫(kù)管理系統(tǒng)。
一、php5.3以下的版本連接sql server
5.3以下的版本擴(kuò)展里面自帶一個(gè)php_mssql.dll;接數(shù)據(jù)庫(kù)的擴(kuò)展,可以利用這個(gè)擴(kuò)展鏈接數(shù)據(jù)庫(kù),(只限于鏈接低版本數(shù)據(jù)庫(kù))。
具體的步驟如下:
1:首先安裝sql server,超級(jí)不好安裝,我之前安裝的是2008版本的,Windows過(guò)期后就不能用了,然后重裝還裝不上,最后重裝系統(tǒng)才裝上
2:確定SQL裝的時(shí)候用的是混合認(rèn)證模式,或SQL驗(yàn)證模式,然后打開(kāi)php的配置文件(php.ini),開(kāi)啟mssql擴(kuò)展 (extension=php_pdo_mssql.dll前面的分號(hào)去掉)并且需要把mssql.secure_connection = On 重啟后生效。
如果比較順利的話已經(jīng)可以連接數(shù)據(jù)庫(kù)了,如果連不上就需要繼續(xù)低下的配置:
3: 檢查ntwdblib文件的版本(php/下面和Apache/下面)下載正確的版本的 ntwdblib.dll(2000.80.194.0)覆蓋現(xiàn)有的DLL文件,(把ntwdblib.dll,php_mssql.dll 復(fù)制到system32目錄中也可以)ntwdblib.dll 用于PHP連接MSSQL2005或2008的驅(qū)動(dòng)文件。
4:測(cè)試連接:mssql_connect('localhost,1433', '用戶名', '密碼');
二、php5.3+連接sql server
其 實(shí)5.3以下的php版本已經(jīng)很少用了,況且安全性和兼容性都不好,所以高版本的php還是比較常見(jiàn)的。實(shí)踐證明低版本的php連接數(shù)據(jù)庫(kù)成功率比較低 (2005以上的版本幾乎不能使用),推薦使用php5.3+ php使用微軟專(zhuān)門(mén)的擴(kuò)展 SQLSRV 來(lái)連接sqlserver數(shù)據(jù)庫(kù)
步驟如下:
1:先到微軟網(wǎng)站下載 SQL Server Driver for PHP 是一個(gè)自解壓的 EXE文件,解壓縮后你會(huì)得到這么幾個(gè)文件:
其中的52、53表示就是php的5.2.x和5.3.x 版本,選擇跟你php版本相匹配的;vc6或vc9的選擇要看你使用的是什么web服務(wù)器軟件,如果使用的是IIS那就選擇vc9的,如果是Apache 則選擇vc6的,ts和nts的選擇要看你安裝的php版本是線程安全版的還是非線程安全版,ts是線程安全,nts是非線程安全。
如果不知道可以在phpinfo里看Zend Extension Build這個(gè)屬性如下圖:
2:將擴(kuò)展拷貝到拷到php/ext目錄下,在php.ini文件,添加一下代碼:
extension=在ext下的pdo擴(kuò)展(用于pdo)
extension=在ext下的擴(kuò)展
3:重啟服務(wù)器,打開(kāi)phpinfo();看到以下?tīng)顟B(tài)就證明添加擴(kuò)展成功,
4:連接測(cè)試:
?php ? $serverName = "(local)"; ? $connectionInfo = array("UID"="sa","PWD"="admin","Database"="db_online"); ? $conn = sqlsrv_connect( $serverName, $connectionInfo); ? if( $conn ){ ? ? ?echo "Connection established.\n"; ? }else{ ? ? ?echo "Connection could not be established.\n"; ? ? ?die( var_dump(sqlsrv_errors())); ? } ? sqlsrv_close( $conn); ?
注意這里的連接不是用mssql_connect而是用sqlsrv_connect,在這個(gè)版本中,還有幾個(gè)函數(shù):
這個(gè)擴(kuò)展為php新增了一系列sqlsrv_開(kāi)頭的函數(shù),常用的如下:
sqlsrv_connect
sqlsrv_close
sqlsrv_commit
sqlsrv_errors
sqlsrv_fetch
sqlsrv_fetch_array
sqlsrv_fetch_metadata
sqlsrv_num_rows
sqlsrv_query
sqlsrv_rollback
sqlsrv_rows_affected
. . .
另外注意的是,如果使用這個(gè)擴(kuò)展連接Sql server 2005以及以上版本的sql server(如sql server 2008),你還需要在機(jī)器上先安裝 SQL Server Native Client
不然會(huì)出現(xiàn)如下錯(cuò)誤:
array
0 =array
0 =string'IMSSP'(length=5)
'SQLSTATE' =string'IMSSP'(length=5)
1 =int-49
'code' =int-49
2 =string'This extension requires the Microsoft SQL Server 2012 Native Client. Access the ? ? following URL to download the Microsoft SQL Server 2012 Native Client ODBC driver for x86:
'
(length=216)
'message' =string'This extension requires the Microsoft SQL Server 2008 Native Client. Access the following URL to download the Microsoft SQL Server 2008 Native Client ODBC driver for x86:
'
(length=216)
1 =array
0 =string'IM002'(length=5)
'SQLSTATE' =string'IM002'(length=5)
1 =int0
'code' =int0
2 =string'[Microsoft][ODBC 驅(qū)動(dòng)程序管理器] 未發(fā)現(xiàn)數(shù)據(jù)源名稱(chēng)并且未指定默認(rèn)驅(qū)動(dòng)程序'(length=71)
'message' =string'[Microsoft][ODBC 驅(qū)動(dòng)程序管理器] 未發(fā)現(xiàn)數(shù)據(jù)源名稱(chēng)并且未指定默認(rèn)驅(qū)動(dòng)程序'(length=71)
解決方法:需要安裝SQL Server 2008 Native Client ODBC Driver,下載安裝文件sqlncli.msi,安裝后就可以了。
網(wǎng)上有 其實(shí)連接MSSQL 有很多方法
第一種 到微軟下載連接驅(qū)動(dòng)
第二種 用ODBC 開(kāi)放數(shù)據(jù)庫(kù)連接
php.ini文件中;extension=php_pdo_mssql.dll ;extension=php_pdo_odbc.dll 前面的分號(hào)去掉,對(duì)應(yīng)的使哪種方式連接mssql。注意要重啟服務(wù)使其生效。
一、建立連接
1、odbc
首先,在php程序所在的服務(wù)器設(shè)置odbc。這里32位和64位操作系統(tǒng)有區(qū)別。32位的從控制面板中管理工具中的數(shù)據(jù)源(odbc)直接建立就可以了,64位的要運(yùn)行C:\Windows\SysWOW64\odbcad32.exe從這里面設(shè)置。注意:上面只的是數(shù)據(jù)庫(kù)服務(wù)器為32為的,數(shù)據(jù)源設(shè)置服務(wù)器為32位和64位兩種的情況。只要兩個(gè)服務(wù)器建立的數(shù)據(jù)源位數(shù)一致就好。
下面是odbc建立連接代碼。
復(fù)制代碼 代碼如下:
$con = odbc_connect('odbc名稱(chēng)','用戶名','密碼');2、連接mssql2000
復(fù)制代碼 代碼如下:
$con = mssql_connect('數(shù)據(jù)庫(kù)地址','用戶名','密碼');3、連接mssql2008
復(fù)制代碼 代碼如下:
$connectionInfo = array("UID"=用戶名,"PWD"=密碼,"Database"="數(shù)據(jù)庫(kù)名稱(chēng)");$con = sqlsrv_connect( 數(shù)據(jù)庫(kù)地址,$connectionInfo);二、輸入查詢代碼
這個(gè)都一樣,可以直接寫(xiě)入,也可以從mssql中驗(yàn)證好后復(fù)制過(guò)來(lái)。簡(jiǎn)單點(diǎn)說(shuō)就是把一個(gè)sql語(yǔ)句賦值給一個(gè)變量。
類(lèi)似下面代碼
復(fù)制代碼 代碼如下:
$query = "SELECT top 12 * 數(shù)據(jù)庫(kù)名稱(chēng) order by id desc";三、建立查詢并取出數(shù)據(jù)
1、odbc
復(fù)制代碼 代碼如下:
$result = odbc_do($con,$query);
while(odbc_fetch_row($result))
{
$變量名稱(chēng) = odbc_result($result, "字段名稱(chēng)");}
2、連接mssql2000
復(fù)制代碼 代碼如下:
$result = mssql_query($con, $query);
while($row =mssql_fetch_array($result))
{
$變量名稱(chēng) = $row["字段名稱(chēng)"];
}
3、連接mssql2008
復(fù)制代碼 代碼如下:
$result = sqlsrv_query($con, $query);
while($row = sqlsrv_fetch_array($result)){
$變量名稱(chēng) = $row["字段名稱(chēng)"];
}
在php5.3及以后的版本中不附帶sqlsrv庫(kù)了。所以要從微軟這里下載。
四、關(guān)閉連接
這個(gè)沒(méi)有什么區(qū)別,分別是odbc_close();和mssql_close()和sqlsrv_close();最后體會(huì):php連接mssql比連接mssql的函數(shù)少了一些,但是也夠用了。具體函數(shù)可以參考php官方手冊(cè)
常規(guī)方式
常規(guī)方式就是按部就班的讀取文件了。其余的話和上述方案一致。
// 讀取配置文件內(nèi)容
$handle = fopen("filepath", "r"); ? ? ? ? ? ?$content = fread($handle, filesize("filepath"));123
PHP解析XML
上述兩種讀取文件,其實(shí)都是為了PHP解析XML來(lái)做準(zhǔn)備的。關(guān)于PHP解析XML的方式的博客有很多。方式也有很多,像simplexml,XMLReader,DOM啦等等。但是對(duì)于比較小型的xml配置文件,simplexml就足夠了。
配置文件
?xml version="1.0" encoding="UTF-8" ?mysql
!-- 為防止出現(xiàn)意外,請(qǐng)按照此標(biāo)準(zhǔn)順序書(shū)寫(xiě).其實(shí)也無(wú)所謂了 --
hostlocalhost/host
userroot/user
password123456/password
dbtest/db
port3306/port/mysql12345678910
解析
?php/**
* 作為解析XML配置文件必備工具
*/class XMLUtil {
public static $dbconfigpath = "./db.config.xml"; ? ?public static function getDBConfiguration() {
$dbconfig = array (); ? ? ? ?try { ? ? ? ? ? ?// 讀取配置文件內(nèi)容
$handle = fopen(self::$dbconfigpath, "r"); ? ? ? ? ? ?$content = fread($handle, filesize(self::$dbconfigpath)); ? ? ? ? ? ?// 獲取xml文檔根節(jié)點(diǎn),進(jìn)而獲取相關(guān)的數(shù)據(jù)庫(kù)信息
$mysql = simplexml_load_string($content); ? ? ? ? ? ?// 將獲取到的xml節(jié)點(diǎn)信息賦值給關(guān)聯(lián)數(shù)組,方便接下來(lái)的方法調(diào)用
$dbconfig['host'] = $mysql-host; ? ? ? ? ? ?$dbconfig['user'] = $mysql-user; ? ? ? ? ? ?$dbconfig['password'] = $mysql-password; ? ? ? ? ? ?$dbconfig['db'] = $mysql-db; ? ? ? ? ? ?$dbconfig['port'] = $mysql-port; ? ? ? ? ? ?// 將配置信息以關(guān)聯(lián)數(shù)組的形式返回
return $dbconfig;
} catch ( Exception $e ) { ? ? ? ? ? ?throw new RuntimeException ( "mark讀取數(shù)據(jù)庫(kù)配置文件信息出錯(cuò)!/markbr /" );
} ? ? ? ?return $dbconfig;
}
}1234567891011121314151617181920212223242526272829
數(shù)據(jù)庫(kù)連接池
對(duì)于PHP程序而言,優(yōu)化永無(wú)止境。而數(shù)據(jù)庫(kù)連接池就在一定程度上起到了優(yōu)化的作用。其使得對(duì)用戶的每一個(gè)請(qǐng)求而言,無(wú)需每次都像數(shù)據(jù)庫(kù)申請(qǐng)鏈接資源。而是通過(guò)已存在的數(shù)據(jù)庫(kù)連接池中的鏈接來(lái)返回,從時(shí)間上,效率上,都是一個(gè)大大的提升。
于是,這里簡(jiǎn)單的模擬了一下數(shù)據(jù)庫(kù)連接池的實(shí)現(xiàn)。核心在于維護(hù)一個(gè)“池”。
從池子中取,用畢,歸還給池子。
?php/**x
* ?PHP中的數(shù)據(jù)庫(kù) 工具類(lèi)設(shè)計(jì)
* ?郭璞
* ?2016年12月23日
*
**/class DbHelper { ? ?private $dbconfig; ? ?private $dbpool; ? ?public $poolsize; ? ?public function __construct($poolsize = 20) { ? ? ? ?if (! file_exists ( "./utils.php" )) { ? ? ? ? ? ?throw new RuntimeException ( "markutils.php文件丟失,無(wú)法進(jìn)行配置文件的初始化操作!/markbr /" );
}else {
require './utils.php';
} ? ? ? ?// 初始化 配置文件信息
$this-dbconfig = XMLUtil::getDBConfiguration (); ? ? ? ?// 準(zhǔn)備好數(shù)據(jù)庫(kù)連接池“偽隊(duì)列”
$this-poolsize = $poolsize;
$this-dbpool = array (); ? ? ? ?for($index = 1; $index = $this-poolsize; $index ++) {
$conn = mysqli_connect ( $this-dbconfig ['host'], $this-dbconfig ['user'], $this-dbconfig ['password'], $this-dbconfig ['db'] ) or die ( "mark連接數(shù)據(jù)庫(kù)失??!/markbr /" );
array_push ( $this-dbpool, $conn );
}
} ? ?/**
* 從數(shù)據(jù)庫(kù)連接池中獲取一個(gè)數(shù)據(jù)庫(kù)鏈接資源
*
* @throws ErrorException
* @return mixed
*/
public function getConn() { ? ? ? ?if (count ( $this-dbpool ) = 0) { ? ? ? ? ? ?throw new ErrorException ( "mark數(shù)據(jù)庫(kù)連接池中已無(wú)鏈接資源,請(qǐng)稍后重試!/mark" );
} else { ? ? ? ? ? ?return array_pop ( $this-dbpool );
}
} ? ?/**
* 將用完的數(shù)據(jù)庫(kù)鏈接資源放回到數(shù)據(jù)庫(kù)連接池
*
* @param unknown $conn
* @throws ErrorException
*/
public function release($conn) { ? ? ? ?if (count ( $this-dbpool ) = $this-poolsize) { ? ? ? ? ? ?throw new ErrorException ( "mark數(shù)據(jù)庫(kù)連接池已滿/markbr /" );
} else {
array_push ( $this-dbpool, $conn );
}
}
}
本文名稱(chēng):php能連接微軟數(shù)據(jù)庫(kù),php能連接微軟數(shù)據(jù)庫(kù)嗎
分享網(wǎng)址:http://chinadenli.net/article10/heiddo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、動(dòng)態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作、網(wǎng)站排名、響應(yīng)式網(wǎng)站、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)