如何在LINUX下用PDO迅雷下载连接资源不动SQLSRVER 2008

12888人阅读
PHP基础(132)
Linux基础(105)
SQLserver00(7)
linux版本:64位CentOS 6.4Nginx版本:nginx1.8.0php版本:php5.5.28Sqlserver版本:2008FreeTDS版本:0.95关于Linux环境安装Nginx+PHP参考即可。&一般来说,PHP+mysql是最经典的组合,跑在Linux环境是非常好的,如果是PHP+Sqlserver是跑在windows环境下的。今天需要Linux环境下PHP调用Sqlserver,用了一天的时间,终于把这个问题彻底研究清楚,网上其他类似文章我大都看了,其实有的是因为太久远不适用,有的有错误,还有的有几个关键问题没有说清楚,看此文其他可以忽略了,说真的踩坑真的很累,也没必要,照着这篇来做就是,所以本文才号称是全网最经典无错版,其实这么说主要是希望大家节省时间。1.首先需要编译安装FreeTDS说明:一定要从官网下载最新的版本FreeTDS-0.95&如果官网实在太慢建议从本人上传的这里一样很快下载:# wget&# tar -zxvf&freetds-patched.tar.gz# cd freetds-0.95需要注意的就是这里的--with-tdsver=7.3,这个非常重要,你需要根据你的数据库版本选择正确的配置项,由于现在大多是SQLserve2008所以需要选择7.3.关于这个问题网上有的说是7.1,也有的说是7.2,甚至有的说是8.0,可以看文末参考帖子,不过那些说的都有问题。造成这个配置项混乱的根源是很多人用的是FreeTDS-0.91,经过我的测试FreeTDS-0.91只支持7.1,如果是7.2以上配置那么通通会变为5.0。其实参考官网的文档就知道这个问题了,不过由于很多人下载了旧版FreeTDS-0.91,即使设置为--with-tdsver=7.2以上也没有用。总结:FreeTDS-0.91只支持7.1,其余都会默认为5.0。只有最新的FreeTDS-0.95,也就是对Sqlserver2008的最佳配置。# ./configure --prefix=/usr/local/freetds --with-tdsver=7.3 --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测试数据库是否联通#&/usr/local/freetds/bin/tsql -H 数据库服务器IP& -p 端口号 -U&用户名 -P 密码&关于freetds/etc/freetds.conf配置项很多其他帖子写了需要配置/usr/local/freetds/etc/freetds.conf,其实这个不需要配置。如果配置也可以,配置了PHP就可以调用这个配置项,否则需要PHP代码里指定数据库服务器信息即可。另外需要注意的是/usr/local/freetds/etc/下的freetds.conf不同于前面/usr/local/freetds/lib/那个freetds.conf。如果配置了这里,那么PHP页面就可以使用这里的配置,不然PHP页面指定一样可以。默认是这样的:#
$Id: freetds.conf,v 1.12
06:02:36 jklowden Exp $
# This file is installed by FreeTDS if no file by the same
# name is found in the installation directory.
# For information about the layout of this file and its settings,
# see the freetds.conf manpage &man freetds.conf&.
# Global settings are overridden by those in a database
# server specific section
# 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]
port = 5000
tds version = 5.0
# A typical Microsoft server
[egServer70]
port = 1433
tds version = 7.0&如果你想使用配置项,只要修改[egServer70]即可:[egServer70]
host = 192.168.1.235 这个是数据库服务器IP
port = 1433
tds version = 7.1其他都不用动,关于[egServer70]的名字也是随意的,这个就是给PHP调用的,和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/ charset=utf-8&);
$msdb=mssql_connect(&egServer70&,&blog.csdn.net.unix21&,&password&);
if (!$msdb) {
echo &connect sqlserver error&;
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/ 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&;
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/ charset=utf-8&);
$hostname = &数据库IP&;
$port = 1433;
$dbname = &数据库名&;
$username = &blog.csdn.net.unix21&;
$pw = &password&;
$dbh = new PDO (&dblib:host=$hostname:$dbname=$dbname&,&$username&,&$pw&);
} catch (PDOException $e) {
echo &Failed to get DB handle: & . $e-&getMessage() . &\n&;
$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.12.官方信息3.本人之前也是参考这些的,但是有些地方有错误,网上主要也就这些帖子,其他都是互相引用的。}}
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9796514次
积分:99623
积分:99623
排名:第9名
原创:1539篇
转载:141篇
评论:4092条
(1)(1)(1)(2)(1)(2)(1)(2)(2)(3)(10)(7)(4)(3)(1)(8)(2)(2)(1)(3)(3)(1)(2)(2)(2)(2)(1)(4)(20)(13)(2)(12)(11)(14)(22)(55)(16)(9)(20)(66)(27)(36)(67)(124)(44)(1)(8)(21)(2)(2)(1)(1)(5)(5)(1)(4)(16)(1)(3)(8)(1)(1)(4)(4)(10)(505)(18)(1)(19)(50)(67)(298)本文讲的是pdo和ODBC来连接SQL Server,
下载驱动程序,我下载的是2.0的,下载后安装释放程序,里面有以下文件:
php教程_pdo_sqlsrv_52_nts.dll
php_pdo_sqlsrv_52_ts.dll
php_pdo_sqlsrv_53_nts_vc6.
下载驱动程序,我下载的是2.0的,下载后安装释放程序,里面有以下文件:
php教程_pdo_sqlsrv_52_nts.dll
php_pdo_sqlsrv_52_ts.dll
php_pdo_sqlsrv_53_nts_vc6.dll
php_pdo_sqlsrv_53_nts_vc9.dll
php_pdo_sqlsrv_53_ts_vc6.dll
php_pdo_sqlsrv_53_ts_vc9.dll
php_sqlsrv_52_nts.dll
php_sqlsrv_52_ts.dll
php_sqlsrv_53_nts_vc6.dll
php_sqlsrv_53_nts_vc9.dll
php_sqlsrv_53_ts_vc6.dll
php_sqlsrv_53_ts_vc9.dll
SQLServerDriverForPHP.chm(手册,英文够好的话,可以看看,嘿嘿)
SQLServerDriverForPHP_License.rtf
SQLServerDriverForPHP_Readme.htm(自述文件)
下面是自述文件里的内容,我翻译一下:
驱动程序文件
线程安全性
用于PHP .dll
php_sqlsrv_53_nts_vc6.dll
php_pdo_sqlsrv_53_nts_vc6.dll
php_sqlsrv_53_nts_vc9.dll
php_pdo_sqlsrv_53_nts_vc9.dll
php_sqlsrv_53_ts_vc6.dll
php_pdo_sqlsrv_53_ts_vc6.dll
php5ts.dll
php_sqlsrv_53_ts_vc9.dll
php_pdo_sqlsrv_53_ts_vc9.dll
php5ts.dll
php_sqlsrv_52_nts.dll
php_pdo_sqlsrv_52_nts.dll
php_sqlsrv_52_ts.dll
php_pdo_sqlsrv_52_ts.dll
php5ts.dll
关于VC6和VC9的区别,还有非线程安全与线程安全
VC6 版本是使用 Visual Studio 6 编译器编译的,如果你是在windows下使用Apache+PHP的,请选择VC6版本。
VC9 版本是使用 Visual Studio 2008 编译器编译的,如果你是在windows下使用IIS+PHP的,请选择VC9版本。
Non Thread Safe就是非线程安全,在执行时不进行线程(Thread)安全检查;
Thread Safe 是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式而耗尽系统资源;
我用的是APMserv 搭建的PHP环境(Apache 2.2.9+PHP 5.2.6+MySQL 5.1.28),想用线程安全的,所以选择php_sqlsrv_52_ts.dll和php_pdo_sqlsrv_52_ts.dll。
开始工作,先把文件拷贝到PHP文件夹下的ext目录下,然后在配置文件php.ini
的Extensions后面加上:
;extension=php_sqlsrv_52_ts.dll
;extension=php_pdo_sqlsrv_52_ts.dll
再重启Apache。
最后测试一下是否成功,看一下phpinfo的sqlsrv
如图所示这样就表示连接成功了!!开始工作喽!
连接数据库教程
使用过SQL Server的人应该都清楚,SQL Server常用的有两种认证方式,一种是本地系统账户认证(Windows Authentication ),一种是使用用户名和密码(SQL Server Authentication ),第二种认证方式必须启用SQL Server的混合模式。
1.Windows Authentication连接部分代码段
$serverName = "(local)";
$connectionInfo = array("Database"=&"test","ConnectionPooling"=&false);
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn == false)
echo "连接失败!";
die( print_r( sqlsrv_errors(), true));
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php
pdo连接sql server、php pdo连接sqlserver、pdo连接sqlserver、odbc连接sql server、vc odbc连接sqlserver,以便于您获取更多的相关知识。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
开发者常用软件,超百款实用软件一站式提供
云栖社区()为您免费提供相关信息,包括
的信息,还有pdo连接sql server、php pdo连接sqlserver、pdo连接sqlserver、odbc连接sql server、vc odbc连接sqlserver等
,所有相关内容均不代表云栖社区的意见!Linux环境下连接Mssql 2008 - ThinkPHP框架
据说ThinkPHP3.2.3的数据库连接都采用PDO方式了,但Driver没有Mssql的~郁闷!
网上搜了一通,没找到Linux环境支持Sqlsrv驱动的环境配置。
研究了几天终于在Linux环境里连上了SQL Server 2008,o(∩_∩)o 哈哈!
首先,Linux环境装个驱动:Microsoft(R) SQL Server(R) ODBC Driver 1.0 for Linux
根据安装指引配置一下,得支持unixODBC,配置网上很多,可参考:
最后看了下phpinfo有这些了:
既然没有Mssql驱动,就增加一个吧,但PHP水平极其有限,于是就用Sqlsrv的改了改:
ThinkPHP&Library&Think&Db&Driver&Mssql.class.php......
protected&$selectSql&&=&&&&&'SELECT&T1..............';&//可以在ThinkPHP之前版本的Mssql驱动扩展里CP
protected&$options&=&array(
&&&&&&&&PDO::ATTR_CASE&&&&&&&&&&&&&&=&&&PDO::CASE_LOWER,
&&&&&&&&PDO::ATTR_ERRMODE&&&&&&&&&&&=&&&PDO::ERRMODE_EXCEPTION,
&&&&&&&&PDO::ATTR_STRINGIFY_FETCHES&=&&&false,
&&&&&&&&//PDO::SQLSRV_ATTR_ENCODING&&&=&&&PDO::SQLSRV_ENCODING_UTF8,&//注释掉这行
protected&function&parseDsn($config){
&&&&&&&&//Driver引自/etc/odbcinst.ini文件(下面加粗部分)
&&&&&&&&$dsn&&=&&&'odbc:Driver=SQL&Server&Native&Client&11.0;Database='.$config['database'].';Server='.$config['hostname'];
......config.php配置参考我前一篇文章。
大概这样就OK了!
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

我要回帖

更多关于 冰点下载网络连接失败 的文章

 

随机推荐