因为项目以前的数据库为SQLServer(MsSQL),客户希望不要换数据库。在当今客户就是上帝的理念下,于是只能采用Linux下PHP操作MsSQL。由于之前没什么经验,甚至可以说是第一次。于是在网上找了很多Linux下PHP配置MsSQL的资料,其中不得不说错误太多,自己做了很多实验,最终还是完美的解决PHP支持MsSQL的问题。下面带我们就详细的看看Linux下如何配置PHP支持MsSQL?
1、下载并安装freetds,freetds是一套为UNIX和Linux允许程序来跟微软SQL Server和Sybase数据库交互的动态库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [root@PHP ~]# wget ftp://ftp.freetds.org/pub/freetds/current/freetds-current.tar.gz [root@PHP ~]# tar -zxvf freetds-current.tar.gz [root@PHP ~]# cd freetds-dev.0.99.633/ [root@PHP freetds-dev.0.99.633]# ./configure --prefix=/usr/local/freetds --with-tdsver=7.3 --enable-msdblib [root@PHP freetds-dev.0.99.633]# make && make Install [root@IM freetds-dev.0.99.633]# /usr/local/freetds/bin/tsql -H mssql数据库地址 -p 端口 -U 用户名-P 密码
locale is "en_US.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" 1> use test; #选择数据库 2> go #提交才会执行 1> select * from user #查询user表 2> go #提交才会执行 1> quit |
2、PHP有两种方式操作MsSQL,一种通过PHP中MsSQL扩展中的MsSQL相关函数,一种是通过PHP中pdo_dblib扩展通过pdo的方式操作MsSQL。下面分别讲解下安装PHP MsSQL扩展和pdo_dblib扩展以及各自的用法。
a、安装PHP mssql扩展。
1 2 3 4 5 6 7 8
| [root@PHP ~]# cd /php-5.6.18/ext/mssql/ [root@IM mssql]# phpize [root@IM mssql]# ./configure --with-php-config=/usr/local/bin/php-config --with-mssql=/usr/local/freetds [root@IM mssql]# make && make install [root@IM mssql]# vi php.ini extension=mssql.so #注意mssql.so的路径 [root@IM mssql]# /usr/local/apache/bin/httpd -k restart #重启apache [root@IM mssql]# php -m #查看已经安装的MsSQL扩展 |
这样MsSQL扩展就安装完成了,就可以使用MsSQL相关函数操作MSSql数据库了。
1 2 3 4 5
| $conn = mssql_connect("ip地址:端口", "用户名", "密码"); //测试连接 if ($conn) { echo "连接成功"; } |
b、安装pdo_dblib扩展
1 2 3 4 5 6 7 8
| [root@PHP ~]# cd /usr/php-5.5.28/ext/pdo_dblib/ [root@IM pdo_dblib]# phpize [root@IM pdo_dblib]# ./configure --with-php-config=/usr/local/bin/php-config --with-pdo-dblib=/usr/local/freetds/ [root@IM pdo_dblib]# make && make install [root@IM pdo_dblib]# vi php.ini extension=pdo_dblib.so #注意pdo_dblib.so的路径 [root@IM pdo_dblib]# /usr/local/apache/bin/httpd -k restart #重启apache [root@IM pdo_dblib]# php -m #查看已经安装的pdo_dblib扩展 |
这时候就可以通过pdo的函数操作MsSQL数据库了。
1 2 3 4 5 6 7 8
| $dsn = 'dblib:host=ip地址:端口;dbname=$dbname'; $user = 'dbuser'; $password = 'dbpass'; try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } |