【发布时间】:2013-11-18 20:33:23
【问题描述】:
所以我使用的是 Linux (ubuntu),我正在尝试连接到 Microsoft Azure SQL 数据库。
服务器信息:
服务器地址是a1a1a1a1a1.database.windows.net(a1a1a1a1a1是我的服务器名的占位符)
数据库名为 MyDatabase
该表名为 [dbo].[Sloth]
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”这一事实。这将解释错误 2 的无效对象名称错误。
关于为什么 ERROR 1 中的代码没有连接到 MyDatabase 有什么想法吗?
【问题讨论】:
-
我正在使用 php 5.2.4 的 yii 框架。从今天开始,与 mssql 的对话一直运行良好,不知道发生了什么变化。我收到的错误是
CDbCommand failed to execute the SQL statement: SQLSTATE[HY000]: General error: 208 General SQL Server error: Check messages from the SQL Server [208] (severity 16) [(null)]. -
@sharif 您是否尝试过检查您的 SQL 服务器日志以查看确切的错误是什么?
-
已解决,缺少表