Я пытаюсь выполнить (очень) простой запрос на Лазурном 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);
?>
В предыдущих ресурсы, которые я уже посещенные являются: -
- why-is-my-sql-server-query-failing
- use-statement-is-not-supported-to-switch-between-databases-when-running-query
- PHPFreaks
Почему вы используете TDS 4.2? Разве текущая версия 7 не указывает что-то? Возможно, это часть проблемы ... –
ссылки для справки 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
Еще раз спасибо, Аарон. Теперь я попытаюсь обновить freeTds, не нарушая ничего другого. :-). Работая или нет, я дам вам знать. – MiguelPragier