Linux下PHP支持MSSql的配置

由於項目之前的數據庫爲SQLServer(MSSql),客戶但願不要換數據庫。在當今客戶就是上帝的理念下,因而只能採用Linux下PHP操做MSSql。因爲以前沒什麼經驗,甚至能夠說是第一次。因而在網上找了不少Linux下PHP配置MSSql的資料,其中不得不說錯誤太多,本身作了不少實驗,最終仍是完美的解決PHP支持MSSql的問題。下面PHP程序員雷雪松就詳細的看看Linux下如何配置PHP支持MSSql?php

一、下載並安裝freetds,freetds是一套爲UNIX和Linux容許程序來跟微軟SQL Server和Sybase數據庫交互的動態庫。
[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 --enable-dbmfix
[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
二、PHP有兩種方式操做MSSql,一種經過PHP中MSSql擴展中的MSSql相關函數,一種是經過PHP中pdo_dblib擴展經過pdo的方式操做MSSql。下面分別講解下安裝PHP mssql擴展和pdo_dblib擴展以及各自的用法。
a、安裝PHP mssql擴展。
[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數據庫了。
$conn = mssql_connect("ip地址:端口", "用戶名", "密碼");
//測試鏈接
if ($conn) {
echo "鏈接成功";
}
b、安裝pdo_dblib擴展
[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數據庫了。sql

$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();
}
下面附上ThinkPHP3.2中操做MSSql的配置文件conf.php:
return array(
//'配置項'=>'配置值'
'DB_TYPE' => 'sqlsrv', // 數據庫類型
'DB_USER' => '', // 用戶名
'DB_PWD' => '', // 密碼
'DB_PORT' =>'', // 端口
'DB_PREFIX' => '', // 數據庫表前綴
'DB_DSN'=> 'dblib:host=IP地址:端口;dbname=數據庫名稱',
'DB_CHARSET' => 'utf8', // 字符集
);
在ThinkPHP3.2中若是支持MSSql,還得修改ThinkPHP驅動文件的鏈接參數,不然會報錯’Undefined class constant ‘PDO::SQLSRV_ATTR_ENCODING’。具體的操做辦法爲:將ThinkPHPLibraryThinkDbDriverSqlsrv.class.php中第26行’PDO::SQLSRV_ATTR_ENCODING => PDO::SQLSRV_ENCODING_UTF8,’註釋掉便可。ThinkPHP數據庫操做MSSql時,若是原表名是USER,若是你寫爲M(‘USER’),那麼ThinkPHP變爲U_S_E_R。因此在ThinkPHP操做MSSql代表必定要小寫。
原文來源:PHP程序員,雷雪松的我的博客--https://www.leixuesong.com/1920數據庫

相關文章
相關標籤/搜索