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号又微信号)右上方扫一扫可加博主微信
所写所说,是心之所感,思之所悟,行之所得;文当无敷衍,落笔求简洁。 以所舍,求所获;有所依,方所成!