如何在Azure上的特定数据库中查询?

时间:2013-08-26 20:13:25

标签: php sql-server azure-sql-database freetds

我正在尝试使用PHP在Azure MSSql Server上执行(非常)简单查询,但它不起作用并打印以下消息:

  

警告:mssql_query():message:无效的对象名称'MyTable'。   (严重程度16)

我认为底层驱动程序直接连接master数据库,这就是我的对象不可用的原因。所以显而易见的解决方案可能是mssql_select_db()函数,但它会引发以下错误消息:

  

警告:mssql_select_db():message:不支持USE语句   切换数据库。使用新连接连接到   不同数据库。 (严重程度16)

那么,你们中的任何人都曾使用PHP成功查询MS Azure SqlServer吗?

有条件的信息: 1 - 连接似乎没问题,没有错误。 2 - 我无法用database.schema限定/前缀我的对象,否则Azure说:

  

警告:mssql_query():message:对数据库和/或服务器的引用   此版本的版本不支持'myDatabase.dbo.MyTable'中的名称   SQL Server。 (严重程度15)

常规配置为:   - CentOS   - PHP 5.3.3   - FreeTDS   - Apache 2

/etc/freetds.conf相关部分如下:

[global]
#TDS protocol version
; tds version = 4.2

[MyServerAtAzure]
host = mydatabase.database.windows.net
port = 1433
tds version = 8.0
database = MyDatabase
client_charset = UTF-8

tsql输出:

# tsql -C
Compile-time settings (established with the "configure" script)
                            Version: freetds v0.91
             freetds.conf directory: /etc
     MS db-lib source compatibility: yes
        Sybase binary compatibility: yes
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 4.2
                              iODBC: no
                           unixodbc: yes
              SSPI "trusted" logins: no
                           Kerberos: yes

最后,PHP代码:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

# Older FreeTDS installations need the FREETDSCONF Environment variable
putenv('FREETDSCONF=/etc/freetds.conf');
# Current release of FreeTDS uses the FREETDS environment variable. So we set both to be sure
putenv('FREETDS=/etc/freetds.conf');

$link = mssql_connect('MyServerAtAzure', 'user@mydatabase', 'password');


if ( !$link ) die('<br>Oops! CannotConnect');

//mssql_select_db('MyDatabase', $link);    # FAILS because you can't use "USE" statement

$sql = "SELECT * FROM dbo.MyTable";

$rs = mssql_query($sql, $link);
?>

我之前访问过的资源是:   -

1 个答案:

答案 0 :(得分:0)

您无法执行跨数据库查询,并且如错误消息所示,您也无法使用USE更改数据库上下文。如果要从多个Azure数据库进行查询,则需要使用不同的连接字符串独立连接它们。

另外,您是否尝试明确指定数据库(而不是连接到[...].wondows.net

[MyServerAtAzure]
host = mydatabase.database.windows.net
port = 1433
Database = myDatabase
tds version = 8.0
client_charset = UTF-8

并正确地为您的表添加其架构前缀?

$sql = "SELECT * FROM dbo.MyTable;";