windows系統IIS下php.X連接并啟用sqlserver擴展(php_sqlsrv)
[重要通告]如您遇疑難雜癥,本站支持知識付費業務,掃右邊二維碼加博主微信,可節省您寶貴時間哦!
1、測試服務器信息,測試代碼如下:
打開用phpinfo();查看php版本信息。如下
<?php
echo phpinfo();
?>
也可以用站內的雅黑探針來探測一下?支持PHP7.X探針-雅黑7.XPHP探針-PHP7雅黑探針(含下載)用雅黑探針也可以彈出使用的版本;
第二步下載:sqlserver擴展
這里我使用的php7.2版本,sqlserver擴展的下載鏈接:https://github.com/Microsoft/msphpsql/releases
官方sqlserver擴展下載鏈接:https://www.microsoft.com/en-us/download/details.aspx?id=20098
5.x版本的sqlserver擴展下載鏈接:鏈接:https://pan.baidu.com/s/1bkkArys7xBaJ9GUc9aDf9g? 提取碼:b6yo
PS:注意下載sqlserver擴展是32位和64位不是根據電腦的系統的位數判斷的,而是根據php的位數判斷的。如上圖的第一個紅框。
第三步:安裝并配置sqlserver擴展
? ? ?找到phpinfo()中使用的php版本。如D:\phpStudy\PHPTutorial\php\php-7.2.1-nts\ext,然后把我們下載的sqlserver的擴展復制在這里。如圖所示:
找到php.ini。如圖所示
復制擴展需要的文件到PHP擴展目錄。(例如我這里使用的是:extension=php_pdo_sqlsrv_72_nts.dll
和? extension=php_sqlsrv_72_nts.dll
)
修改php.ini添加以下兩行來啟用擴展:
extension=php_pdo_sqlsrv_72_nts.dll
extension=php_sqlsrv_72_nts.dll
第四步:下載 ODBC Driver;
PS:注意這里的x86與x64是根據電腦系統判斷的,不是根據php版本
Microsoft? ODBC Driver 11 for SQL Server? - Windows (支持Sql Server? 2005) ?https://www.microsoft.com/zh-CN/download/details.aspx?id=36434
Microsoft? ODBC Driver 13 for SQL Server? - Windows + Linux (支持最新的SQL Server? 2016) ?https://www.microsoft.com/zh-CN/download/details.aspx?id=50420
這里安裝,只需要下一步下一步即可完成安裝...
建議 安裝ODBC Driver,根據自己的需要選擇上面的地址下載并安裝。
如果上面的ODBC版本太高,那么用這個低一點的 ODBC Driver 本站有下載 https://pan.baidu.com/s/1bkkArys7xBaJ9GUc9aDf9g? 提取碼:b6yo
現在可以使用phpinfo() 來查看是否成功加載了?pdo_sqlsrv 模塊。
PS:延伸閱讀:
PHP5.4連接sqlserver
1.下載微軟的php連接驅動:SQLSRV30.EXE(5.4對應,后面的native client要用2012)/SQLSRV20.EXE(5.3對應,native client要用2008)/SQLSERV31.EXE對應5.5
2.解壓SQLSERV30.EXE,拷貝對應extension到php的ext目錄
3.配置php.ini
extension=php_sqlsrv_54_ts.dll(54為5.4版本,ts為線程安全,nts為非線程安全,帶pdo的是用pdo方式連接,sqlsrvxx.exe里都有)
mssql.secure_connection?=?Off改為on?很多教程沒寫這個
4.重啟IIS/Apache
5.在sqlserver服務器配置TCP/IP連接
6.在php服務器下載安裝sqlserver native client(win8下裝上這玩意http://www.microsoft.com/en-us/download/details.aspx?id=20098)
測試代碼
連接sqlserver
?前提是sqlserver可以外網連接。
$conn = sqlsrv_connect('localhost', array('Database' => 'test', 'UID' => 'sa' , 'PWD' => '123456'));
if( $conn == false){
var_dump(sqlsrv_errors());exit;
}$sql = "SELECT * FROM users";
$result = @sqlsrv_query($conn, $sql);
while ( $re = @sqlsrv_fetch_array($result)) {?
var_dump($re);
}
host一般是ip+端口,如ip,1433 。ip與端口之間用,隔開
$database = "數據庫名稱";
$uid = "sa";
$pwd = "123";
$Server = "192.168.0.152";
$conInfo=array('Database'=>$database,'UID'=>$uid,'PWD'=>$pwd);
$link=sqlsrv_connect($Server,$conInfo);if( $link ){
// echo "Connection established.\n";
$query = 'SELECT * FROM T_Sys_UserInfo';/* Set parameter values. */
$params = array(75123, 5, 741, 1, 818.70, 0.00);/* Prepare and execute the query. */
$stmt = sqlsrv_query( $link, $query, $params);
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
{
echo $row['UseName'].", ".$row['RealName']."\n";
}}
else{
//echo "Connection could not be established. ";
print_r( sqlsrv_errors(), true);
if( ($errors = sqlsrv_errors() ) != null) {
foreach( $errors as $error ) {
echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
echo "code: ".$error[ 'code']."<br />";
echo "message: ".$error[ 'message']."<br />";
}
}
die("");
}
PDO方式連接:
<?php
header("Content-Type: text/html;charset=utf-8");class mssql{
private $host;
private $username;
private $password;
private $database;
private $handle;
private function __construct (Array $config){
$this -> host = $config['host'];
$this -> username = $config['username'];
$this -> password = $config['password'];
$this -> database = $config['database'];
$this -> init();
}
private function init() {
$dsn = 'sqlsrv:server = '.$this -> host.';database = '.$this->database;
$this -> handle = new PDO($dsn,$this -> username, $this -> password);
}
public static function GetInstance(array $config = null) {
if (null == $config) {
return NULL;
}
static $db = null;
if (null == $db) {
$c = __CLASS__;
$db = new $c($config);
};
return $db -> handle;
}
}$config = array(
'host' => '192.168.0.152,1433',
'database' => '數據庫名稱',
'username' => 'sa',
'password' => '123'
);
$mssql = mssql::GetInstance($config);
$result = $mssql->query('SELECT * FROM T_Sys_UserInfo');
foreach($result as $row){
echo $row[2];
}
?>
問題未解決?付費解決問題加Q或微信 2589053300 (即Q號又微信號)右上方掃一掃可加博主微信
所寫所說,是心之所感,思之所悟,行之所得;文當無敷衍,落筆求簡潔。 以所舍,求所獲;有所依,方所成!