我决定使用FreeTDS驱动程序和unixODBC来管理基于LAMP的应用程序与远程MsSQL数据库之间的PDO连接.不幸的是,驱动程序似乎没有读取freetds.conf文件,也没有直接通过服务器的CLI设置或通过putenv()函数在php文件中指定的环境变量.
现在一些数据:
因为我使用命令
TDSVER=7.0 tsql -H >IP< -p 1433 -U username
Run Code Online (Sandbox Code Playgroud)
系统提示我输入密码并建立连接.
没有命令前面的TDSVER - 连接失败并显示以下消息:
Error 20017 (severity 9):
Unexpected EOF from the server
OS error 115, "Operation now in progress"
Error 20002 (severity 9):
Adaptive Server connection failed
There was a problem connecting to the server
Run Code Online (Sandbox Code Playgroud)tsql -C命令回声这样的输出:
Compile-time settings (established with the "configure" script)
Version: freetds v0.91
freetds.conf directory: /usr/local/etc
MS db-lib source compatibility: yes
Sybase binary compatibility: no
Thread safety: yes …Run Code Online (Sandbox Code Playgroud)我尝试按照下面文章中的说明进行操作,但它说:" 没有包装freetds可用. "
http://www.hosting.com/support/linux/installing-freetds-for-linux/
这是我的I/O:
[root@mydomain ~]# yum search freetds
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.web-ster.com
* extras: mirror.beyondhosting.net
* updates: mirrors.sonic.net
=============================== Matched: freetds ===============================
php-mssql.x86_64 : MSSQL database module for PHP
[root@mydomain ~]# yum install freetds
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.web-ster.com
* extras: mirror.beyondhosting.net
* updates: mirrors.sonic.net
Setting up Install Process
No package freetds available.
Error: Nothing to do
Run Code Online (Sandbox Code Playgroud)
我该如何安装freetds?我只是想连接到SQL Server!
编辑:
之后yum install …
我正在使用mac计算机OSX 10.9.Freetds和unixODBC已经安装在我的计算机上并作为扩展添加到php,试图连接到远程MSSQL服务器.以下是我的连接测试:
<?php
$dbh = new PDO('dblib:host=Hostname ;dbname=Dbname', 'user', 'pw');
if (!$dbh) {
die('Something went wrong while connecting to MSSQL');
}
?>
Run Code Online (Sandbox Code Playgroud)
错误日志文件显示:
[error] [client 127.0.0.1] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] Unknown host machine name (severity 2)
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢 ?如果我使用终端连接到同一个数据库,我的freetds和unixODBC似乎正常工作:
$ isql Hostname user pw
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Run Code Online (Sandbox Code Playgroud)
和
$ tsql -S Hostname -U user
Password:
locale is "en_US.UTF-8"
locale …Run Code Online (Sandbox Code Playgroud) 我想建立一个从PHP到SQL Server 2012的数据库连接.我在Windows机器(64位)上使用PHP 5.5.12设置了一个wamp服务器(64位),并且在我安装了SQL Server 2012的同一台机器上.
从official_link中提取sqlsrv驱动程序
将提取的驱动程序php_sqlsrv_55_ts.dll复制extension = php_pdo_sqlsrv_55_ts.dll到php\ext文件夹,然后更改php.ini文件以包含扩展名
extension = php_sqlsrv_55_ts.dll; extension = php_pdo_sqlsrv_55_ts.dll;
Run Code Online (Sandbox Code Playgroud)
现在我试过了
<?php
phpinfo();
?>
Run Code Online (Sandbox Code Playgroud)
我看到以下信息,其中没有任何SQL服务器信息.


似乎没有成功配置SQL Server连接.有人可以指导我在这里缺少的东西.
我的意思是非常简单.我想通过安全连接从PHP脚本连接到外部MS SQL数据库.然而,这已经证明是有问题的,到目前为止,研究投入了三个小时,我感到很茫然.
客户端的平台是Ubuntu,这意味着我不能使用SQLSRV.安全连接已经过不同客户端的测试,工作正常.我目前正在使用PDO和DBlib连接到数据库,这也可以正常工作.
我无法找到任何强制安全连接的方法.我尝试了多个其他驱动程序,但无济于事.
我有什么选择?
编辑:我留下了以下FreeTDS日志......
config.c:543: Got a match.
config.c:565: host = 'XXXXXXXXXX'
config.c:595: Found host entry XXXXXXXXXX.
config.c:599: IP addr is XXXXXXXXXX.
config.c:565: port = '1433'
config.c:565: encryption = 'require'
config.c:565: check certificate hostname = 'no'
config.c:629: UNRECOGNIZED option 'check certificate hostname' ... ignoring.
config.c:565: ca file = 'XXXXXXXXXX.pem'
config.c:629: UNRECOGNIZED option 'ca file' ... ignoring.
Run Code Online (Sandbox Code Playgroud) 我有以下脚本连接到我的microsoft azure服务器.
<?php
try {
$hostname = "secrets.database.windows.net";
$dbname = "secrets";
$username = "secrets";
$pw = "secrets";
$dbh = new PDO ("dblib:host=$hostname;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
echo "Passed!";
Run Code Online (Sandbox Code Playgroud)
上面的脚本传递我的旧服务器,但从新服务器执行时给我以下错误消息.
SQLSTATE[01002] Adaptive Server connection failed (severity 9)
Run Code Online (Sandbox Code Playgroud)
我的新服务器PHP设置如下:
sudo apt-get install -y php5.6-fpm php5.6-ldap php5.6-curl php5.6-cli php5.6-mcrypt php5.6-intl php5.6-json php5.6-pdo-dblib php5.6-mysqlnd php5.6-memcached php5.6-mbstring php5.6-imap php5.6-xml php5.6-sybase
Run Code Online (Sandbox Code Playgroud)
到目前为止我的检查:
1)两者都具有相同的面向公众的IP地址.
2)两者都具有相同的PHP PDO/ODBC设置.
$ php -i | grep PDO
DO …Run Code Online (Sandbox Code Playgroud) php ×4
freetds ×3
pdo ×3
sql-server ×3
linux ×2
ubuntu ×2
azure ×1
centos ×1
macos ×1
plesk ×1
sql ×1
ssl ×1
ubuntu-10.04 ×1
wampserver ×1
yum ×1