我正在尝试使用 PHP 在 Azure MSSql Server 上执行(非常)简单的查询,但它不起作用并打印以下消息:
警告:mssql_query():消息:无效的对象名称“MyTable”。(16 级)
我相信底层驱动程序直接连接到主数据库,这就是我的对象不可用的原因。因此,显而易见的解决方案可能是mssql_select_db()函数,但它会引发以下错误消息:
警告:mssql_select_db():消息:不支持 USE 语句在数据库之间切换。使用新连接连接到不同的数据库。(16 级)
那么,你们中的任何人都曾经使用 PHP 成功查询过 MS Azure SqlServer 吗?
附加信息: 1 - 连接似乎正常,没有错误。2 - 我不能用 database.schema 限定/前缀我的对象,否则 Azure 会说:
警告:mssql_query():消息:此版本的 SQL Server 不支持对“myDatabase.dbo.MyTable”中的数据库和/或服务器名称的引用。(严重性 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);
?>
我之前访问过的资源是: -