2013-08-26 57 views
0

我試圖使用PHP執行Azure的MSSQL Server上的非常簡單的查詢,但它不工作,並打印如下消息:如何在Azure的特定數據庫中進行查詢?

警告:mssql_query():消息:無效的對象名稱MyTable的」。 (嚴重性16)

我認爲底層驅動程序直接連接主數據庫,這就是爲什麼我的對象不可用。所以,顯而易見的解決方案可能是mssql_select_db()功能,但它引發的後續錯誤消息:

警告:mssql_select_db():消息:USE語句不支持數據庫之間 開關。使用新的連接連接到另一個數據庫 。 (嚴重性16)

那麼,你們中的任何一個人都曾經使用PHP成功地查詢過MS Azure SqlServer嗎?

附加信息: 1 - 連接看起來沒問題,沒有錯誤。 2 - 我沒有資格/前綴我的對象與database.schema,否則Azure的說:

警告:mssql_query():消息:參照「myDatabase.dbo數據庫和/或服務器 名。 MyTable'在此版本的 SQL Server中不受支持。 (嚴重性15)

常規配置爲: - CentOS的 - PHP 5.3.3 - freetds的 - 阿帕奇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', '[email protected]', '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); 
?> 

,我已經訪問過以前的資源有: -

+2

?是不是當前的版本7點的東西?也許這是問題的一部分... –

+0

供參考的鏈接http://www.idevelopment.info/data/SQLServer/DBA_tips/Programming/PROG_6.shtml#Install FreeTDS http:///stackoverflow.com/questions/10889294/what-is-tds-protocol-version-8- 0-and-why-should-i-use-it – swasheck

+0

再次感謝你,亞倫。現在我會嘗試升級freeTds,而不會破壞其他任何東西。 :-)。工作與否,我會讓你知道。 – MiguelPragier

回答

0

不能執行跨數據庫查詢,像錯誤消息說,你也可以不使用USE更改數據庫上下文。如果您想從多個Azure數據庫進行查詢,則需要使用不同的連接字符串獨立連接它們。

另外,你可以嘗試使用數據庫明確(而不是連接到[...].wondows.net

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

,並還適當爲什麼要使用TDS 4.2與它的模式前綴的表

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

你好,@Aaron。我不打算查詢交叉數據庫。情況是,freeTDS(我相信)直接連接到[master]數據庫,這不是我想要工作的數據庫。我想連接並查詢[MyDatabase]而不是[master]。我已經嘗試了在設置之間包含「數據庫」的好消息,並將查詢對象作爲前綴加上了dbo,但結果仍然相同。 – MiguelPragier

+0

你確認它連接到主設備嗎? 'SELECT DB_NAME();' –

+0

@Miguel也可以看到[this MSDN thread](http://social.msdn.microsoft.com/Forums/windowsazure/en-US/8e27a1d7-8a70-4084-9c19-66ed2b6a407f/cannot-連接與freetds)這表明你需要告訴ODBC連接到什麼數據庫。 –

相關問題