尝试连接/查询Microsoft Azure SQL数据库时,DBLIB PDO驱动程序保持失败

所以我使用Linux(Ubuntu的),我试图连接到一个Microsoft Azure SQL数据库。

服务器信息:

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" 

在terminal它返回

 PDO drivers => dblib, mysql 

所以就我所知,所有的configuration和驱动程序安装都是应该的。

所以现在的错误:

错误1

如果我像这样初始化PDO:

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

它连接,但如果我删除“=”字符的数据库名称,如下所示:

 $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数据库pipe理门户中,它将返回所有正确的行。

任何有关这些问题的帮助将不胜感激!

编辑

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

任何想法为什么错误1中的代码不连接到MyDatabase?

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

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

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