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

如何在LINUX下用PDO连接SQLSRVER 2008

发布网友 发布时间:2022-04-30 08:17

我来回答

3个回答

懂视网 时间:2022-04-30 12:38

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-30 09:46

  用unixODBC连接
  记录步骤,详细细节请自己问百度
  首先需要安装freetds
  cd freetds-0.91
  ./configure --prefix=/usr/local/freetds --enable-msdblib --with-tdsver=7.1 // 注意这里用7.1 因为最高是7.2 如果用7.2会默认5.0
  make && make install
  当然我推荐使用ODBC+freetds 毕竟这样PHP可以更好的支持
  所以先安装 unixODBC
  cd unixODBC-2.3.1
  ./configure --prefix=/usr/local/unixODBC
  make && make install
  然后freetds需要如下配置
  ./configure --prefix=/usr/local/freetds --with-unixodbc=/usr/local/unixODBC --enable-msdblib --with-tdsver=7.1
  make && make install
  配置ODBC
  cd /usr/local/unixODBC/etc
  vi odbcinst.ini
  [TDS]
  Description = MS-SQLServer
  Driver = /usr/local/freetds/lib/libtdsodbc.so
  Setup = /usr/local/freetds/lib/libtds.so
  FileUsage = 1
  保存退出
  vi odbc.ini
  [mssql]
  Driver = TDS
  Server = 192.168.1.2
  Database = xxxDB
  Port = 1433
  Socket =
  Option =
  Stmt =
  保存退出
  现在可以测试连接SQLSERVER了
  /usr/local/unixODBC/bin/isql -v mssql sa password
  //mssql 是 odbc.ini里定义的节点名
  完美成功。。。
  当然别忘记去PHP动态的扩展ODBC组件

热心网友 时间:2022-04-30 11:04

安装SQL2008的过程与SQL2005的程序基本一样,只不过在安装的过程中部分选项有所改变,当然如果只熟悉SQL2000安装的同志来说则是一个*性的变动, 一、安装前的准备1. 需要.Net Framework 3.5,若在Vista或更高的OS上需要3.5 SP1的支持(在SQL2008安装的前会自动更新安装)2. 需要Widnows PowerShell的支持,WPS是一个功能非常强大的Shell应用,命令与DOX/UNIX兼容并支持直接调用.NET模块做行命令编辑,是非常值得深入研究的工具(在SQL2008安装时会自动更新安装)3. 需要确保Windows Installer的成功启动,需要4.5以上版本(需要检查服务启动状态service.msc)4. 需要MDAC2.8 sp1的支持(XP以上系统中已集成)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 交互设计的“根”——七大定律 交互设计原则和理论2——七大定律 七大设计原则 附近的加油站有哪些 附近的加油站有哪些地方 急,我的手心长了很多小疙瘩,不痒。脚上有脱皮现象,会痒,怎么回事? 手心手缝长了很多红色的小疙瘩开 手心长很多小疙瘩还很热是什么原因 我的手心长了很多小小的像水泡的疙瘩,不... 从檀溪路中到襄阳影视甚地公交路线 公交车 546路怎么样 手心和脚心长了很多小红疙瘩 重庆546路公交车路线 苹果手机耳机按两下不切歌了怎么回事?音量加减和暂停播放都好使,就是连续按两下和三下都不切歌。 襄城坐546路公交车到医保局从那站下 北京公交546路全程时间! 广州546公交晚上哪里停车 急急急急急!!! 苹果耳机怎么设置切歌 546公交车从九州通到武汉协和医院怎么走? 从鲁谷大街的吴庄到后海的公交车路线 绍兴滨海金旺角546公交车早上几点发车到旺角 烟草证提到十二档要什么条件 烟草12档为什么一周只拿6条烟 广告结尾出来的英语字幕不知道是什么意思~~ 坐546路公交到舵落口大市场在哪一站下车 给我想一个斗牛的名字,要大气一点威猛一点的,三个字四个字的最好! 给斗牛犬公狗取个霸气点的名字? 三个月的法国斗牛犬 起个好听的名字 英国斗牛犬叫什么名字好听??? 本机话费可以给其他手机充话费吗? 桂花金凤茶是属于什么茶 金凤是属于乌龙茶类吗?像喜茶中的金凤指的是? 奶茶店热饮怎么做 五谷杂粮粉怎么做? 杂粮粉怎么做 杂粮面粉怎么做?是直接用杂粮磨面吗? 蒸熟的五谷杂粮粉怎么做 杂粮淀粉是怎么做到的 家里的门从里面锁上了,但是外面的人用力一点的话还是能开的开,请问这种情况应该怎么办? 门自动从里面锁上了,怎么办 知了最喜欢吸食哪种树的汁液? 知了吃不吃富贵竹的汁液? 按摩哪些穴位可以治疗牙痛? 蝉可以吃多肉植物的汁液吗? Linux下PHP连接sql2008出现Fatal error: Call to undefined function mssql_connect()