问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux系统下 php跨平台连接sqlserver数据库获取数据

发布网友 发布时间:2022-04-08 07:19

我来回答

2个回答

懂视网 时间:2022-04-08 11:41

Nginx版本:nginx1.8.0

php版本:php5.5.28

Sqlserver:2008

 

关于Linux环境安装Nginx+PHP参考《Linux环境Nginx安装与调试以及PHP安装 》即可。

 

一般来说,PHP+mysql是最经典的组合,跑在Linux环境是非常好的,如果是PHP+Sqlserver是跑在windows环境下的。

今天需要Linux环境下PHP调用Sqlserver,用了一天的时间,终于把这个问题彻底研究清楚,网上其他类似文章我大都看了,其实有的是因为太久远不适用,有的有错误,还有的有几个关键问题没有说清楚,看此文其他可以忽略了,说真的踩坑真的很累,也没必要,照着这篇来做就是,所以本文才号称是全网最经典无错版,其实这么说主要是希望大家节省时间。

1.首先需要编译安装FreeTDS

说明:FreeTDS官网下载比较慢,可以从本人上传的这里一样很快下载:http://download.csdn.net/detail/21aspnet/8997397

# wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-patched.tar.gz
# tar -zxvf freetds-0.91.tar.gz
# cd freetds-0.91

需要注意的就是这里的--with-tdsver=7.1,这个非常重要,网上有的说是7.2,有的说是8.0,关于这个的问题可以看文末参考帖子。


# ./configure --prefix=/usr/local/freetds --with-tdsver=7.1 --enable-msdblib
# make && make install

 

安装好会看到这样的信息:

技术分享

 

配置FreeTDS

# cd ../

# echo "/usr/local/freetds/lib/" > /etc/ld.so.conf.d/freetds.conf
# ldconfig

 

验证FreeTDS

这一步非常重要,通过才可以继续,不然后面的步骤都是无意义的。

首先看看版本信息

# /usr/local/freetds/bin/tsql -C

技术分享

如果前面配置的时候--with-tdsver=7.1如果写的是7.2和8.0或者其他都会这里TDS版本是5.0,原因见后面的参考信息中的帖子。

 

# /usr/local/freetds/bin/tsql -H 数据库服务器IP:XXX -p 1433 -U 用户名 -P 密码

或者直接

# /usr/local/freetds/bin/tsql -H 数据库服务器IP  -p 1433 -U 用户名 -P 密码

技术分享

 

关于freetds/etc/freetds.conf

重要说明:很多其他帖子写了需要配置/usr/local/freetds/etc/freetds.conf,另外需要注意的是etc下的freetds.conf不同于前面那个freetds.conf。

其实默认已经生成好了etc下的freetds.conf,其实这是多余的,不过配置了也没有问题。

 

如果配置了这里,那么PHP页面就可以使用这里的配置,不然PHP页面指定一样可以。

默认是这样的:

[global]
 # TDS protocol version
;	tds version = 4.2

	# Whether to write a TDSDUMP file for diagnostic purposes
	# (setting this to /tmp is insecure on a multi-user system)
;	dump file = /tmp/freetds.log
;	debug flags = 0xffff

	# Command and connection timeouts
;	timeout = 10
;	connect timeout = 10
	
	# If you get out-of-memory errors, it may mean that your client
	# is trying to allocate a huge buffer for a TEXT field. 
	# Try setting ‘text size‘ to a more reasonable limit 
	text size = 64512

# A typical Sybase server
[egServer50]
	host = symachine.domain.com
	port = 5000
	tds version = 5.0

# A typical Microsoft server
[egServer70]
	host = ntmachine.domain.com
	port = 1433
	tds version = 7.0


修改[egServer70]为这样:

[egServer70]
	host = 192.168.1.235 这个是数据库服务器IP
	port = 1433
	tds version = 7.1

其他都不用动,关于[egServer70]的名字也是随意的,这个就是给PHP调用的,一致即可。

 

3.添加PHP扩展mssql和pdo的pdo_dblib

说明:这2种扩展都可以达到相同的目的,选其一即可。

(1).增加PHP扩展mssql

# cd /usr/php-5.5.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

技术分享


(2).增加PHP扩展pdo的pdo_dblib
# cd /usr/php-5.5.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

 

(3).在php.ini配置文件中增加.so
# cd /usr/local/php/lib下的php.ini

增加:

extension = "mssql.so"
extension ="pdo_dblib.so"


如果你只需要上述2种扩展之一,自然只要新增其中一个的.so扩展到php.ini即可。

(4).重启PHP FastCGI

# killall php-fpm
# /etc/init.d/php-fpm

 

如果没有正确生成扩展是不能重启php-fpm的。

这时候在phpinfo里就可以看到扩展添加成功的信息了。

技术分享

技术分享

4.使用PHP调用SQLserver

(1).mssql_connect配置版

<?php
header("Content-type: text/html; charset=utf-8");
$msdb=mssql_connect("egServer70","blog.csdn.net.unix21","password");
if (!$msdb) {
	echo "connect sqlserver error";
	exit;
	}
mssql_select_db("数据库名",$msdb);
$result = mssql_query("SELECT top 5 * FROM tablename", $msdb);
while($row = mssql_fetch_array($result)) {
 print_r($row);
}
mssql_free_result($result);
?>

注意:上面的egServer70就是前面freetds/etc/freetds.conf配置的。

 

(2).mssql_connect非配置版

<?php
header("Content-type: text/html; charset=utf-8");
//$msdb=mssql_connect("数据库IP","blog.csdn.net.unix21","password");
//$msdb=mssql_connect("数据库IP:1433","blog.csdn.net.unix21","password");
$msdb=mssql_connect("数据库IP:49151","blog.csdn.net.unix21","password");
if (!$msdb) {
	echo "connect sqlserver error";
	exit;
	}
mssql_select_db("数据库名",$msdb);
$result = mssql_query("SELECT top 5 * FROM tablename", $msdb);
while($row = mssql_fetch_array($result)) {
 print_r($row);
}
mssql_free_result($result);
?>


(3).PDO版本

<?php
header("Content-type: text/html; charset=utf-8");
 try {
 $hostname = "数据库IP";
 $port = 1433;
 $dbname = "数据库名";
 $username = "blog.csdn.net.unix21";
 $pw = "password";
 $dbh = new PDO ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
 } catch (PDOException $e) {
 echo "Failed to get DB handle: " . $e->getMessage() . "
";
 exit;
 }
 
 $stmt = $dbh->prepare("SELECT top 5 * FROM tablename");
 $stmt->execute();
 while ($row = $stmt->fetch()) {
 print_r($row);
 }
 unset($dbh); unset($stmt);

?>

 

显示数据:
技术分享

以上本人都是验证过的。

 

 

参考信息:

1.这个帖子解释了第一个重要问题为什么是--with-tdsver=7.1

http://blog.csdn.net/dlutxie/article/details/6851429

2.官方信息

http://php.net/manual/zh/ref.pdo-dblib.php

http://php.net/manual/zh/function.mssql-connect.php

3.本人之前也是参考这些的,但是有些地方有错误,网上主要也就这些帖子,其他都是互相引用的。

http://zyan.cc/php_sqlserver_freetds/

http://my.oschina.net/robanlee/blog/168626?p={{currentPage+1}}

http://blog.csdn.net/rgb_rgb/article/details/8762769

http://blog.sina.com.cn/s/blog_87b9bbc70101avmh.html

http://stackoverflow.com/questions/13180746/mssql-connect-unable-to-connect-to-server-without-freetds-conf

http://blog.csdn.net/chenjiebin/article/details/7278304
http://blog.163.com/koumm@126/blog/static/9540383720112157055119/
http://www.linuxidc.com/Linux/2012-09/70192.htm
http://blog.csdn.net/helonsy/article/details/7207497

http://my.oschina.net/u/217063/blog/220337

版权声明:本文为博主原创文章,未经博主允许不得转载。

Linux环境PHP5.5以上连接SqlServer2008【全网最经典无错版】

标签:

热心网友 时间:2022-04-08 08:49

你可以在你php的server里面尝试用shell远程连接你的SQLserver。一般这些是两个问题,要么是你远程SQLserver没有开端口,所有不能访问你SQLserver,或者是你mysql没有开启远程连接。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如果银行拒贷有哪些办法 小天鹅滚筒洗衣机水位多少合适 阴阳师百闻牌攻略大全 百闻牌式神卡组阵容大全 阴阳师百闻牌三大妖狐阵容推荐 妖狐流派怎么搭配?-新手攻略-安族网... 阴阳师百闻牌妖狐快攻阵容 怎么搭配攻略推荐 阴阳师百闻牌妖狐技能攻略 妖狐属性及卡组搭配推荐-新手攻略-安族网... 阴阳师百闻牌妖狐最强卡组 阵容怎么搭配攻略 阴阳师百闻牌妖狐卡组推荐 怎么搭配攻略分享 带鹏字的公司名字大全 鹏字开头公司起名 叶罗丽娃娃玩具店在哪 你好、我想问一下怎么用银河奇异果投屏?我手机有爱奇艺、连的同一网络 英语作文:请你根据以下信息为“永济饺子店&quot;设计一份介绍产品的广告,登在报纸上。词数:50左右,字数别超 幼儿介绍永济面食区的饺子蝴蝶面的话语 介绍永济的英语作文 梦见房子被砸倒,有些人也被困在里面没出来,是什么意思? 永济饺子怎么做 第一次有顾客咨询产品怎么发朋友圈? 竹丝鸡和瘦肉煲汤有什么做用 江苏成人高考录取结果 没有查询到相关记录 如何撰写懂客户心的软文 ai怎样制作旋转箭头 江苏成人高考结束后可以查询当时填报时填的信息吗? 淮山可以和竹丝鸡煲汤吗 江苏成考成绩查询有异议应该怎么办? 竹丝鸡煲汤放什么材料? 竹丝鸡用什么药材煲汤 江苏省成人高考准考证没了怎么办要查分数 用什么煲竹丝鸡汤好饮 如何用Ai画转折箭头,如图 怀孕竹丝鸡煲什么汤好 梦见姥姥嘴里流血? 梦见情人嘴角边流了一点点血? 梦见一个人打的嘴里流了很多血后来死了 梦见外婆嘴巴有血 梦见男情人嘴角边流了一点点血,这意味着什么,会发生什么? 塑封机a3什么意思 50公分的纸张大小能塑封吗? 大家知道的有哪种照片塑封机用电功率比较小,大概是用多少w的? 省委书记能撤掉县长吗 省委书记能罢免省长吗 省委书记可以撤了市委书记吗 省长能撤县委书记吗 省委书记退休回乡县长有权利管理吗 县长和县委书记是一回事吗? 县**是谁选的,市**是谁选的,省**是谁选的?是党员吗? 那*,*,*呢? 省委书记为什么还要去兼任一个县委书记? 省委书记和省长有区别吗 各位捕鱼高手们,请你们帮帮忙看看这种鱼叫什么名字啊 记得小时候去小溪或池塘捕鱼,经常把一种比较漂亮、凶猛的小鱼养起来,请问这种鱼叫什么名字? 《人民的名义》如果赵立春没倒台,高育良真的能接任**吗?