2013-08-26 2 views
0

Я пытаюсь выполнить (очень) простой запрос на Лазурном MSSQL Server с помощью PHP, но он не работает и печатает сообщение последующих:Как запросить в конкретной базе данных на Azure?

Предупреждение: mssql_query(): сообщение: Invalid имя объекта " MyTable. (серьезность 16)

Я считаю, что основной драйвер напрямую соединяет основную базу данных, и поэтому мои объекты недоступны. Таким образом, очевидное решение может быть mssql_select_db() функция, но она вызывает сообщение об ошибке последующей:

Предупреждение: mssql_select_db(): сообщение: USE оператор не поддерживается переключения между базами данных. Используйте новое соединение для подключения к базе данных . (серьезность 16)

Итак, любой из вас, ребята, когда-либо успешно использовал MS Azure SqlServer с помощью PHP?

Дополнительная информация: 1 - Соединение выглядит ОК, без ошибок. 2 - Я не могу претендовать/префикс моих объектов с database.schema, иначе Azure говорит:

Предупреждение: mssql_query(): Сообщение: Ссылка на базу данных и/или сервер имени в «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 -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

Почему вы используете TDS 4.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 

А также правильно префиксы таблицу с схемой

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

Здравствуйте, @Aaron. Я не намерен запрашивать кросс-базу данных. Дело в том, что freeTDS (как я полагаю) напрямую подключается к [master] базе данных, и это не база данных, которую я хочу работать. Я хочу подключиться и запросить [MyDatabase] вместо [master]. Я пробовал ваш хороший sugestion, включая «базу данных» между настройками и префикс объектов запроса с помощью dbo., Но результат все еще та же. – MiguelPragier

+0

Вы подтвердили, что он подключается к мастеру? 'SELECT DB_NAME();' –

+0

@ Мигель также видит [этот поток MSDN] (http://social.msdn.microsoft.com/Forums/windowsazure/en-US/8e27a1d7-8a70-4084-9c19-66ed2b6a407f/cannot- connect-with-freetds), который предлагает вам указать ODBC, к какой базе данных подключиться. –