尝试连接/查询Microsoft Azure SQL数据库时,DBLIB PDO驱动程序一直出现故障

时间:2013-11-18 20:33:24

标签: php sql ubuntu azure pdo

所以我正在使用Linux(ubuntu),我正在尝试连接到Microsoft Azure SQL数据库。

服务器信息:

  • 服务器地址是a1a1a1a1a1.database.windows.net(a1a1a1a1a1是我的服务器名称的占位符)

  • 数据库名称为MyDatabase

  • 该表名为[dbo]。[懒惰]

Freetds.conf设置:

[global]
    dump file = /tmp/freetds.log
    debug flags = 0xffff
    text size = 64512

[a1a1a1a1a1.database.windows.net]
    host = a1a1a1a1a1.database.windows.net
    port = 1433
    tds version = 8.0
    client charset = UTF-8

当我跑步时

php -r "phpinfo();" | grep "PDO drivers"
终端中的

返回

PDO drivers => dblib, mysql

所以据我所知,所有的配置和驱动程序安装都应该如何。

现在对于错误:

错误1

如果我像这样初始化PDO:

$conn = new \PDO ( "dblib:dbname = MyDatabase;host=a1a1a1a1a1.database.windows.net;", $Username, $Password);

它连接,但如果我删除dbname的'='字符周围的空格,如:

$conn = new \PDO ( "dblib:dbname=MyDatabase;host=a1a1a1a1a1.database.windows.net;", $Username, $Password);

它从PDOException和freetds.log

返回这些错误
SQLSTATE[HY000] General SQL Server error: Check messages from the SQL Server (severity 16)

(dbutil.c:86):msgno 40508: "USE statement is not supported to switch between databases. Use a new connection to connect to a different Database."

错误2

当我运行以下代码时

try {
    $conn = new \PDO ( "dblib:dbname = MyDatabase;host=a1a1a1a1a1.database.windows.net;", $Username, $Password);
    $conn->setAttribute( \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION );
    $statement = $conn->prepare("SELECT * FROM dbo.Sloth");
    $result = $statement->execute();
}
catch ( PDOException $e ) {
    print( "Error connecting to SQL Server." );
    die(print_r($e));
}

它在$ result = ...行中出现了PDOException和freetds.log中的这些错误

SQLSTATE[HY000]: General error: 208 General SQL Server error: Check messages from the SQL Server [208] (severity 16) [(null)] 

(dbutil.c:86):msgno 208: "Invalid object name 'dbo.Sloth'."

但是当我运行查询时

SELECT * FROM dbo.Sloth

在Azure数据库管理门户中,它返回所有正确的行。

非常感谢对这些问题的任何帮助!

修改

通过一些测试,我发现这两个问题都源于PDO没有连接到数据库而是连接到“master”的事实。这将解释ERROR 2的无效对象名称错误。

为什么ERROR 1中的代码无法连接到MyDatabase?

1 个答案:

答案 0 :(得分:1)

<强>解

我使用的是PHP 5.3.10,其中仍然存在以下错误,https://bugs.php.net/bug.php?id=64338

原来PDO驱动程序正在制作一个Microsoft Azure SQL数据库不喜欢的USE语句。

我升级到PHP 5.4.21,一切正常。