Tops博客

PHP7连接微软 SQL Server (MSSQL)


我们以 32位PHP7 和 SQL Server 2012 (面板版) 作为示例演示,其他版本方法类似
文章中所有连接均为微软官方下载


安装 SQL Server 2012



https://www.microsoft.com/zh-cn/download/details.aspx?id=56042


  • SP4 是目前2012最新的一个版本,发布与 2017.10

  • 下载 Express 版本的 SQLEXPRADV_x64_CHS.exe

  • Express 是可以免费商业使用的,对于我们来说足够用了

  • SQLEXPRADV 是一个完整包,包含所有的工具,如 SSMS




各版本说明

LocalDB (SqlLocalDB)是 Express的一种轻型版本,该版本具备所有可编程性功能,但在用户模式下运行,并且具有快速的零配置安装和必备组件要求较少的特点。
Express (SQLEXPR) 版本仅包含 SQLServer 数据库引擎。它最适合需要接受远程连接或以远程方式进行管理的情况。

Express with Tools (SQLEXPRWT) 此包包含将 SQL Server 作为数据库服务器进行安装和配置所需的全部内容,包括SSMS的完整版本。

SQL Server Management Studio Express (SQLManagementStudio) 此版本不包含数据库,只包含用于管理 SQL Server 实例的工具的完整版本(简称SSMS)。

Express with Advanced Services (SQLEXPRADV) 此包包含 SQL Server Express 的所有组件,包括SSMS的完整版本。



  1. 安装时勾选全部工具

  2. 安装时,在数据库引擎配置阶段,选择使用SQL Server身份认证(需要输入密码),而非Windows身份认证



"必须重新启动计算机才能安装 SQL Server"的问题解决




  1. 重启机器,再进行安装,如果发现还有该错误,请按下面步骤

  2. 在开始->运行中输入regedit

  3. 到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager 位置

  4. 在右边窗口右击PendingFileRenameOperations,选择删除,然后确认

  5. 重启安装,问题解决



安装 ODBC 工具



https://www.microsoft.com/zh-cn/download/details.aspx?id=36434


  • 此为 Microsoft® ODBC Driver 11 for SQL Server 适用于 SQL Server 2012 , 其他版本具体Google



安装时勾选全部工具

安装PHP PDO SQLSRV 拓展



https://www.microsoft.com/en-us/download/details.aspx?id=20098


  • Version 4.0 supports PHP 7.0+ on Windows and Linux

  • Version 3.2 supports PHP 5.6, 5.5, and 5.4 on Windows

  • Version 3.1 supports PHP 5.5 and 5.4 on Windows

  • Version 3.0 supports PHP 5.4 on Windows



本文是 php7.0 , 所以下载 SQLSRV40.EXE

安装时需要选择PHP目录,需要选择PHP程序根目录\ext 文件夹。
软件会生成 php_pdo_sqlsrv_7_ .dll 4个 和 php_sqlsrv_7_.dll 4个,共8个文件。
由于我们使用的是nts连接,且 PHP版本是32位的,因此将以下内容插入到php.ini 中 extension=*.dll下方

extension=php_pdo_sqlsrv_7_nts_x86.dll
extension=php_sqlsrv_7_nts_x86.dll



版本x64和x86 选择和你的PHP版本有关,和系统版本、数据库版本无关!


重启 Apache/Nginx 和 PHP

测试是否安装好



通过PHPinfo来查看,查找 有没有 pdo_sqlsrv 拓展,如果有说明配置成功

<?php
phpinfo();
?>


使用PHP测试SQLServer连接



<?php
try {
$dbh = new PDO("sqlsrv:Server=192.168.1.110,1433;Database=数据库名", "sa", "数据库密码");
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "n";
exit;
}
echo 'connent MSSQL succeed';

$stmt = $dbh->prepare("select * from users");
$stmt->execute();

while ($row = $stmt->fetch()) {
print_r($row);
}


如果出现 connent MSSQL succeed 说明已经连接成功了,但是很多时候会出现 由于目标计算机积极拒绝 ……

由于目标计算机积极拒绝 的解决方法



在开始菜单,打开“SQL配置管理器”,找到左侧 “SQL Server 网络配置”->“MSSQLSERVER的协议”, 把 Named Pipes 、 TCP/IP 右击启用

此次会提示重启 SQL Server 服务即可,但是实际情况好像不管用,建议直接 重启电脑


SQL Server 可能会占用80端口,同样需要在“SQL配置管理器”中先将SQL服务停止,再启动Apache/Nginx,然后在启动SQL


ThinkPHP设置(以3.2.3版本)



'DB_TYPE' => 'sqlsrv', // 数据库类型
'DB_HOST' => '192.168.1.110', // 服务器地址
'DB_NAME' => 'lingyun', // 数据库名
'DB_USER' => 'sa', // 用户名
'DB_PWD' => 'lingyun', // 密码
'DB_PORT' => '1433', // 端口
'DB_PREFIX' => 'ly_', // 数据库表前缀


然后可以使用M函数或者D函数测试一下

评论