2018年6月21日17:17:09,注意:不是详细文档,新手可能会看不懂
windows下安装
项目是sql server 2008的k3,php连接数据库写的API,因为是买的时候是别人的程序,测试环境用的windows 2008,首先需要需要下载对应的php版本的DLL和驱动,好多人只下载的DLL,但是没有ODBC安装驱动,
还得根据版本下载,https://docs.microsoft.com/zh-cn/sql/connect/php/microsoft-php-driver-for-sql-server?view=sql-server-2017,这个总说明
https://docs.microsoft.com/zh-cn/sql/connect/php/step-1-configure-development-environment-for-php-development?view=sql-server-2017这个是详细说明
下载驱动关系就是
PHP
Microsoft Drivers for PHP for SQL Server 需要以下版本的 PHP:
| ↓ PHP 版本 | 5.3 和 5.2 |
4.3 |
4.0 |
3.2 |
3.1 |
|---|---|---|---|---|---|
| 7.2 | 在其他平台上 7.2.0+ | ||||
| 7.1 | 7.1.0+ | 7.1.0+ | |||
| 7.0 | 7.0.0+ | 7.0.0+ | 7.0.0+ | ||
| 5.6 | 5.6.4 + | ||||
| 5.5 | 5.5.16 + | 5.5.16 + | |||
| 5.4 | 5.4.32 | 5.4.32 |
-
加载 Microsoft Drivers for PHP for SQL Server。
-
PHP 的网站教程。
Microsoft Drivers for PHP for SQL Server 进行了测试。
备注
Microsoft 仅提供对 IIS 的支持。
-
Microsoft Drivers for PHP for SQL Server 版本 5.3 将上一次,以支持 PHP 7.0。
ODBC 驱动程序
本页。
在非 Windows 平台上只有 64 位版本的驱动程序可用。
| ↓ODBC 驱动程序版本 | 5.3 |
5.2 |
4.3 |
4.0 |
3.2 |
3.1 |
|---|---|---|---|---|---|---|
| ODBC 驱动程序 17+ | 是 | 是 | ||||
| ODBC 驱动程序 13.1 | 是 | 是 | 是 | 是 | ||
| ODBC 驱动程序 13 | 是 | |||||
| ODBC 驱动程序 11 | 是 | 是 | 是 | 是 | 是 | 是 |
PDO::getAttribute 来发现版本。
SQL Server
连接到 Microsoft Azure SQL 数据库。
| ↓ SQL Server 版本 | 5.3 |
5.2 |
4.3 |
4.0 |
3.2 |
3.1 |
|---|---|---|---|---|---|---|
| Azure SQL Database | 是 | 是 | 是 | |||
| Azure SQL 托管实例 | 是 | 是 | 是 | |||
| Azure SQL 数据仓库 | 是 | 是 | 是 | |||
| SQL Server 2017 | 是 | 是 | 是 | |||
| SQL Server 2016 | 是 | 是 | 是 | 是 | ||
| SQL Server 2014 | 是 | 是 | 是 | 是 | 是 | 是 |
| SQL Server 2012 | 是 | 是 | 是 | 是 | 是 | 是 |
| SQL Server 2008 R2 | 是 | 是 | 是 | 是 | 是 | 是 |
| SQL Server 2008 | 是 | 是 | 是 |
操作系统
有关版本的驱动程序支持的操作系统如下所示:
| ↓ 操作系统 | 5.3 |
5.2 |
4.3 |
4.0 |
3.2 |
3.1 |
|---|---|---|---|---|---|---|
| Windows Server 2016 | 是 | 是 | 是 | |||
| Windows Server 2012 R2 | 是 | 是 | 是 | 是 | 是 | 是 |
| Windows Server 2012 | 是 | 是 | 是 | 是 | 是 | 是 |
| Windows Server 2008 R2 SP1 | 是 | 是 | 是 | |||
| Windows Server 2008 SP2 | 是 | 是 | 是 | |||
| Windows 10 | 是 | 是 | 是 | 是 | ||
| Windows 8.1 | 是 | 是 | 是 | 是 | 是 | 是 |
| Windows 8 | 是 | 是 | 是 | 是 | ||
| Windows 7 SP1 | 是 | 是 | 是 | |||
| Windows Vista SP2 | 是 | 是 | 是 | |||
| Ubuntu 18.04 (64 位) | 是 | |||||
| Ubuntu 17.10 (64 位) | 是 | 是 | ||||
| Ubuntu 16.04 (64 位) | 是 | 是 | 是 | 是 | ||
| Ubuntu 15.10 (64 位) | 是 | |||||
| Ubuntu 15.04 (64 位) | 是 | |||||
| Debian 9 (64 位) | 是 | 是 | ||||
| Debian 8 (64 位) | 是 | 是 | 是 | |||
| Red Hat Enterprise Linux 7(64 位) | 是 | 是 | 是 | 是 | ||
| Suse Enterprise Linux 12 (64 位) | 是 | 是 | ||||
| macOS High Sierra (64 位) | 是 | |||||
| macOS Sierra (64 位) | 是 | 是 | 是 | |||
| macOS El Capitan (64 位) | 是 | 是 | 是 |
驱动程序版本
加载 Microsoft Drivers for PHP for SQL Server。
Microsoft Drivers for PHP for SQL Server Github 项目页,即以下各表列出的预构建的二进制程序包中找到的文件。
Microsoft Drivers 5.3 for PHP for SQL Server:
在 Windows 中,将包括以下版本的驱动程序:
| 驱动程序文件 | PHP 版本 | 线程是否安全? | 与 PHP .dll 一起使用 |
|---|---|---|---|
| 32 位 php_pdo_sqlsrv_7_nts.dll | 7.0 | 否 | 32 位 php7.dll |
| 32 位 php_pdo_sqlsrv_7_ts.dll | 7.0 | 是 | 32 位 php7ts.dll |
| 64 位 php_pdo_sqlsrv_7_nts.dll | 7.0 | 否 | 64 位 php7.dll |
| 64 位 php_pdo_sqlsrv_7_ts.dll | 7.0 | 是 | 64 位 php7ts.dll |
| 32 位 php_pdo_sqlsrv_71_nts.dll | 7.1 | 否 | 32 位 php7.dll |
| 32 位 php_pdo_sqlsrv_71_ts.dll | 7.1 | 是 | 32 位 php7ts.dll |
| 64 位 php_pdo_sqlsrv_71_nts.dll | 7.1 | 否 | 64 位 php7.dll |
| 64 位 php_pdo_sqlsrv_71_ts.dll | 7.1 | 是 | 64 位 php7ts.dll |
| 32 位 php_pdo_sqlsrv_72_nts.dll | 7.2 | 否 | 32 位 php7.dll |
| 32 位 php_pdo_sqlsrv_72_ts.dll | 7.2 | 是 | 32 位 php7ts.dll |
| 64 位 php_pdo_sqlsrv_72_nts.dll | 7.2 | 否 | 64 位 php7.dll |
| 64 位 php_pdo_sqlsrv_72_ts.dll | 7.2 | 是 | 64 位 php7ts.dll |
在 Linux 上,将包括以下版本的驱动程序:
| 驱动程序文件 | PHP 版本 | 线程是否安全? |
|---|---|---|
| php_pdo_sqlsrv_7_nts.so | 7.0 | 否 |
| php_pdo_sqlsrv_7_ts.so | 7.0 | 是 |
| php_pdo_sqlsrv_71_nts.so | 7.1 | 否 |
| php_pdo_sqlsrv_71_ts.so | 7.1 | 是 |
| php_pdo_sqlsrv_72_nts.so | 7.2 | 否 |
| php_pdo_sqlsrv_72_ts.so | 7.2 | 是 |
Microsoft Drivers 5.2 for PHP for SQL Server:
在 Windows 中,将包括以下版本的驱动程序:
| 驱动程序文件 | PHP 版本 | 线程是否安全? | 与 PHP .dll 一起使用 |
|---|---|---|---|
| 32 位 php_pdo_sqlsrv_7_nts.dll | 7.0 | 否 | 32 位 php7.dll |
| 32 位 php_pdo_sqlsrv_7_ts.dll | 7.0 | 是 | 32 位 php7ts.dll |
| 64 位 php_pdo_sqlsrv_7_nts.dll | 7.0 | 否 | 64 位 php7.dll |
| 64 位 php_pdo_sqlsrv_7_ts.dll | 7.0 | 是 | 64 位 php7ts.dll |
| 32 位 php_pdo_sqlsrv_71_nts.dll | 7.1 | 否 | 32 位 php7.dll |
| 32 位 php_pdo_sqlsrv_71_ts.dll | 7.1 | 是 | 32 位 php7ts.dll |
| 64 位 php_pdo_sqlsrv_71_nts.dll | 7.1 | 否 | 64 位 php7.dll |
| 64 位 php_pdo_sqlsrv_71_ts.dll | 7.1 | 是 | 64 位 php7ts.dll |
| 32 位 php_pdo_sqlsrv_72_nts.dll | 7.2 | 否 | 32 位 php7.dll |
| 32 位 php_pdo_sqlsrv_72_ts.dll | 7.2 | 是 | 32 位 php7ts.dll |
| 64 位 php_pdo_sqlsrv_72_nts.dll | 7.2 | 否 | 64 位 php7.dll |
| 64 位 php_pdo_sqlsrv_72_ts.dll | 7.2 | 是 | 64 位 php7ts.dll |
在 Linux 上,将包括以下版本的驱动程序:
| 驱动程序文件 | PHP 版本 | 线程是否安全? |
|---|---|---|
| php_pdo_sqlsrv_7_nts.so | 7.0 | 否 |
| php_pdo_sqlsrv_7_ts.so | 7.0 | 是 |
| php_pdo_sqlsrv_71_nts.so | 7.1 | 否 |
| php_pdo_sqlsrv_71_ts.so | 7.1 | 是 |
| php_pdo_sqlsrv_72_nts.so | 7.2 | 否 |
| php_pdo_sqlsrv_72_ts.so | 7.2 | 是 |
Microsoft Drivers 4.3 for PHP for SQL Server:
在 Windows 中,将包括以下版本的驱动程序:
| 驱动程序文件 | PHP 版本 | 线程是否安全? | 与 PHP .dll 一起使用 |
|---|---|---|---|
| 32 位 php_pdo_sqlsrv_7_nts.dll | 7.0 | 否 | 32 位 php7.dll |
| 32 位 php_pdo_sqlsrv_7_ts.dll | 7.0 | 是 | 32 位 php7ts.dll |
| 64 位 php_pdo_sqlsrv_7_nts.dll | 7.0 | 否 | 64 位 php7.dll |
| 64 位 php_pdo_sqlsrv_7_ts.dll | 7.0 | 是 | 64 位 php7ts.dll |
| 32 位 php_pdo_sqlsrv_71_nts.dll | 7.1 | 否 | 32 位 php7.dll |
| 32 位 php_pdo_sqlsrv_71_ts.dll | 7.1 | 是 | 32 位 php7ts.dll |
| 64 位 php_pdo_sqlsrv_71_nts.dll | 7.1 | 否 | 64 位 php7.dll |
| 64 位 php_pdo_sqlsrv_71_ts.dll | 7.1 | 是 | 64 位 php7ts.dll |
在 Linux 上,将包括以下版本的驱动程序:
| 驱动程序文件 | PHP 版本 | 线程是否安全? |
|---|---|---|
| php_pdo_sqlsrv_7_nts.so | 7.0 | 否 |
| php_pdo_sqlsrv_7_ts.so | 7.0 | 是 |
| php_pdo_sqlsrv_71_nts.so | 7.1 | 否 |
| php_pdo_sqlsrv_71_ts.so | 7.1 | 是 |
Microsoft Drivers 4.0 for PHP for SQL Server:
在 Windows 中,将包括以下版本的驱动程序:
| 驱动程序文件 | PHP 版本 | 线程是否安全? | 与 PHP .dll 一起使用 |
|---|---|---|---|
| php_pdo_sqlsrv_7_nts_x86.dll | 7.0 | 否 | 32 位 php7.dll |
| php_pdo_sqlsrv_7_ts_x86.dll | 7.0 | 是 | 32 位 php7ts.dll |
| php_pdo_sqlsrv_7_nts_x64.dll | 7.0 | 否 | 64 位 php7.dll |
| php_pdo_sqlsrv_7_ts_x64.dll | 7.0 | 是 | 64 位 php7ts.dll |
在 Linux 上,将包括以下版本的驱动程序:
| 驱动程序文件 | PHP 版本 | 线程是否安全? |
|---|---|---|
| php_pdo_sqlsrv_7_nts.so | 7.0 | 否 |
| php_pdo_sqlsrv_7_ts.so | 7.0 | 是 |
Microsoft Drivers 3.2 for PHP for SQL Server:
在 Windows 中,将包括以下版本的驱动程序:
| 驱动程序文件 | PHP 版本 | 线程是否安全? | 与 PHP .dll 一起使用 |
|---|---|---|---|
| php_pdo_sqlsrv_54_nts.dll | 5.4 | 否 | php5.dll |
| php_pdo_sqlsrv_54_ts.dll | 5.4 | 是 | php5ts.dll |
| php_pdo_sqlsrv_55_nts.dll | 5.5 | 否 | php5.dll |
| php_pdo_sqlsrv_55_ts.dll | 5.5 | 是 | php5ts.dll |
| php_pdo_sqlsrv_56_nts.dll | 5.6 | 否 | php5.dll |
| php_pdo_sqlsrv_56_ts.dll | 5.6 | 是 | php5ts.dll |
Microsoft Drivers 3.1 for PHP for SQL Server:
在 Windows 中,将包括以下版本的驱动程序:
| 驱动程序文件 | PHP 版本 | 线程是否安全? | 与 PHP .dll 一起使用 |
|---|---|---|---|
| php_pdo_sqlsrv_54_nts.dll | 5.4 | 否 | php5.dll |
| php_pdo_sqlsrv_54_ts.dll | 5.4 | 是 | php5ts.dll |
| php_pdo_sqlsrv_55_nts.dll | 5.5 | 否 | php5.dll |
| php_pdo_sqlsrv_55_ts.dll | 5.5 | 是 | php5ts.dll |
另请参阅
注意: 数据库版本和系统的关系,然后是数据库的php驱动DLL文件和odbc的关系,
比如
SqlServer 2008 r2 php 7.2 我就可以下载 4.0 到5.3的PHP DLL扩展 ODBC 驱动程序就是,13.1和17+的文件
还要注意的是 odbc如果的你系统的64位的,就只能装64位的odbc驱动,但是如果你的php是32位的,只需要扩展32位 pdo_srv和sql_srv的扩展一样可以访问64位的数据的驱动
还要注意一点就是nts 和ts要一直,不要扩展类型不对,不然就phpinfo无法识别
查看php sqlserver的驱动 odbc数据驱动
配置文件
extension=php_sqlsrv.dll
extension=php_pdo_sqlsrv.dll
这个就是具体的添加dll方法
https://docs.microsoft.com/zh-cn/sql/connect/php/loading-the-php-sql-driver?view=sql-server-2017
注意,有mssql和pdosqlserv2个,一般MVC框架都是使用pdo,这样就可以访问了
linux下安装
注意也有mssql.so和 pdo_dblib.so
首先安装,freetds,官网 http://www.freetds.org
选择版本参考 http://www.freetds.org/userguide/choosingtdsprotocol.htm
| Product | TDS Version | Comment |
|---|---|---|
| Sybase before System 10, Microsoft SQL Server 6.x | 4.2 | Still works with all products, subject to its limitations. |
| Sybase System 10 and above | 5.0 | Still the most current protocol used by Sybase. |
| Sybase System SQL Anywhere | 5.0 only | Originally Watcom SQL Server, a completely separate codebase. Our best information is that SQL Anywhere first supported TDS in version 5.5.03 using the OpenServer Gateway (OSG), and native TDS 5.0 support arrived with version 6.0. |
| Microsoft SQL Server 7.0 | 7.0 | Includes support for the extended datatypes in SQL Server 7.0 (such as char/varchar fields of more than 255 characters), and support for Unicode.
|
| Microsoft SQL Server 2000 | 7.1 | Include support for bigint (64 bit integers), variant and collation on all fields. Collation is not widely used. |
| Microsoft SQL Server 2005 | 7.2 | Includes support for varchar(max), varbinary(max), xml datatypes and MARS[a]. |
| Microsoft SQL Server 2008 | 7.3 | Includes support for time, date, datetime2, datetimeoffset. |
| Microsoft SQL Server 2012 or 2014 | 7.4 | Includes support for session recovery. |
| N/A | 8.0 | FreeTDS will alias this version to 7.1 for backwards compatibility reasons, but this should be avoided due to future compatibility concerns. See note below on obsolete versions. |
我这个版本是 freetds-1.00.86
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-patched.tar.gz
tar -zxvf freetds-patched.tar.gz
./configure --prefix=/usr/local/freetds --with-tdsver=7.3 --enable-msdblib
make && make install
配置FreeTDS
echo "/usr/local/freetds/lib/" > /etc/ld.so.conf.d/freetds.conf
ldconfig
测试
/usr/local/freetds/bin/tsql -C
连接测试
/usr/local/freetds/bin/tsql -H 172.17.1.250 -p 1433 -U sa -P 密码
注意,如果你是编译的那你php的url就是/usr/local/php,如果你是yum ,php-config会没有,就需要安装 yum install php-devel
注意我是5.6版本就需要, yum install php56w-php-devel
编译的话就没这些麻烦,
编译安装的 添加扩展
cd /soft/php-5.6.28/ext/mssql/
linux下用phpize给PHP动态添加扩展
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds/
# make && make install
cd /soft/php-5.6.28/ext/pdo_dblib/
linux下用phpize给PHP动态添加扩展
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-dblib=/usr/local/freetds/
# make && make install
whereis php查看命令路径 ,whereis需要你自己安装
[root@test software]# whereis php
php: /usr/bin/php /etc/php.ini /etc/php.d /usr/lib64/php /usr/include/php /usr/share/php
[root@test software]# whereis php-config
php-config: /usr/bin/php-config /usr/share/man/man1/php-config.1.gz
注意,yum版本扩展
/usr/bin/phpize
./configure --with-php-config=/usr/bin/php-config --with-pdo-dblib=/usr/local/freetds/
注意,yum在添加so的时候,必须
/etc/php.d/pdo.ini, 里面填在,打开phpinfo的时候搜索一下pdo
编译版不会有这个问题,pdo.so需要pdo_dblib之前,有依赖关系
extension=pdo.so
extension = pdo_dblib.so
extension = mssql.so
测试连接
error_reporting(E_ALL); header("Content-type: text/html; charset=utf8"); $serverName = "172.17.1.250:1433"; //数据库服务器地址 $uid = "sa"; //数据库用户名 $pwd = ""; //数据库密码 $dbname = ''; $conn = new PDO("dblib:host=$serverName;dbname=$dbname", "$uid", "$pwd"); if ($conn == false) { echo "连接失败!"; // die(print_r(sqlsrv_errors(), true)); } else { echo "连接成功!"; }
之前怀疑是windows的时候,出现http 429 Too Many Attempts.一开始认为是windows2008的并发数少,就换了linux做接口访问数据库,修改了sql server 2008 属性 连接的最大连接数,和windows2008的连接数
从widnows2008的nginx到apache,怕是nginx在windows下并发差,到linux pdo访问接口,依然还有这个问题,最后折腾了差不多一天发现是laravel的一个中间件的问题,
Laravel从5.2开始,增加了一个Throttle的中间件。如果你仔细看一下Kernel.php文件,你就会发现,api路由是默认使用了这个中间件的。
如果你需要使用就直接添加
Route::group(['domain' => ''], function() { Route::group(['namespace' => 'Data', 'prefix' => 'data','middleware'=>'throttle'], function () { //home Route::get('/', 'IndexController@index'); //国内宏观 Route::get('/test', 'TestController@test'); //测试地址 }); });
一把双刃剑,最后发现每次到60次左右的访问就会出现,google才出来的,哎,百度半天不出结果
对laravel源码研究的少,太忙了,有时间读一下源码