在 ubuntu 上使用 PHP 连接到 sql 服务器数据
Connecting to sql server data with PHP on ubuntu
尝试连接到我的 mssql 数据库时,出现错误
"SQLSTATE[01002] Adaptive Server connection failed (severity 9)"
下面是 php 代码我是 运行
<?php
try {
$hostname = "hostname.database.windows.net";
$port = 1433;
$dbname = "database-dev";
$username = "dbuser";
$pw = "dbpassword";
$dbh = new PDO ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
$stmt = $dbh->prepare("select name from master..sysdatabases where name = db_name()");
$stmt->execute();
while ($row = $stmt->fetch()) {
print_r($row);
}
unset($dbh); unset($stmt);
?>
下面是我的odbc.ini、odbcinst.ini和freetds.conf,你可以在这里看到我的phpinfo() ("http://wingedw.com/matiks/connect.php")驱动程序设置为 freetds 并且 pdo 和 pdo_dlib 模块已添加到 php 5,任何关于为什么我出错的线索,我确保凭据是正确的。
odbc.ini
[MSSQLServer]
Driver = FreeTDS
Description = Any description
Trace = No
Server = servername
Port = 1433
Database = dbname
wTDS_Verison = 7.1
odbcinst.ini
[FreeTDS]
Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so
UsageCount = 1
freetds.conf
[global]
# TDS protocol version
; tds version = 7.1
# 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 = 100
; connect timeout = 100
# 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 = 7.1
# A typical Microsoft server
[MSSQLServer]
host = servername
port = 1433
tds version = 7.1
原来一切都配置正确,问题是使用 dblib 而不是 odbc,请参见下面的代码。
try {
$hostname = "hostname.database.windows.net";
$port = 1433;
$dbName = "databasename";
$dbuser = "dbuser@hostname";
$dbpass = "password";
$dbh = new PDO('odbc:DRIVER=FreeTDS;SERVERNAME=mssql;DATABASE=' . $dbName,
$dbuser, $dbpass);
//echo "COnnected";
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
2021 - 回到未来:
我知道这个 post 已经过时了,但我的回复可以为绝望的灵魂指明正确的方向:
- 您正在使用 odbc,命令“isql”工作正常
- 您正在使用 FreeTDS,命令“tsql”工作正常
- 问题是 运行 通过 FreeTDS 调用 odbc 的 php 脚本 -> 不断出错
干杯快乐的灵魂!
尝试连接到我的 mssql 数据库时,出现错误 "SQLSTATE[01002] Adaptive Server connection failed (severity 9)"
下面是 php 代码我是 运行
<?php
try {
$hostname = "hostname.database.windows.net";
$port = 1433;
$dbname = "database-dev";
$username = "dbuser";
$pw = "dbpassword";
$dbh = new PDO ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
$stmt = $dbh->prepare("select name from master..sysdatabases where name = db_name()");
$stmt->execute();
while ($row = $stmt->fetch()) {
print_r($row);
}
unset($dbh); unset($stmt);
?>
下面是我的odbc.ini、odbcinst.ini和freetds.conf,你可以在这里看到我的phpinfo() ("http://wingedw.com/matiks/connect.php")驱动程序设置为 freetds 并且 pdo 和 pdo_dlib 模块已添加到 php 5,任何关于为什么我出错的线索,我确保凭据是正确的。
odbc.ini
[MSSQLServer]
Driver = FreeTDS
Description = Any description
Trace = No
Server = servername
Port = 1433
Database = dbname
wTDS_Verison = 7.1
odbcinst.ini
[FreeTDS]
Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so
UsageCount = 1
freetds.conf
[global]
# TDS protocol version
; tds version = 7.1
# 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 = 100
; connect timeout = 100
# 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 = 7.1
# A typical Microsoft server
[MSSQLServer]
host = servername
port = 1433
tds version = 7.1
原来一切都配置正确,问题是使用 dblib 而不是 odbc,请参见下面的代码。
try {
$hostname = "hostname.database.windows.net";
$port = 1433;
$dbName = "databasename";
$dbuser = "dbuser@hostname";
$dbpass = "password";
$dbh = new PDO('odbc:DRIVER=FreeTDS;SERVERNAME=mssql;DATABASE=' . $dbName,
$dbuser, $dbpass);
//echo "COnnected";
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
2021 - 回到未来:
我知道这个 post 已经过时了,但我的回复可以为绝望的灵魂指明正确的方向:
- 您正在使用 odbc,命令“isql”工作正常
- 您正在使用 FreeTDS,命令“tsql”工作正常
- 问题是 运行 通过 FreeTDS 调用 odbc 的 php 脚本 -> 不断出错
干杯快乐的灵魂!