PHP + UnixODBC + FreeTDS - SELECT [field] AS [name]不起作用

时间:2012-05-15 09:31:27

标签: php sql sql-server freetds unixodbc

我有一台安装了PHP 5.2.13的unix服务器,它可以访问两台SQL服务器(一台运行MSSQL SERVER 2000,另一台运行MSSQL 2005)。

它使用FreeTDS - 详情:

  • 版本:freetds v0.82
  • freetds.conf目录:/ usr / local / etc
  • MS db-lib源兼容性:否
  • Sybase二进制兼容性:否
  • 线程安全:是
  • iconv library:yes
  • TDS版本:8.0
  • iODBC:没有
  • unixodbc:是的

我正在使用unixODBC-2.3.1

MSSQL 2000服务器很好,我可以像运行MySQL一样运行所有SQL语句并使用mssql_num_rows和mssql_fetch_assoc。

但是,MSSQL 2005服务器不能使用mssql_num_rows或mssql_fetch_assoc - 你必须使用odbc_fetch_row。

这不是一个真正的问题,我认为这只是因为服务器的安装不同。

但是,我对MSSQL 2005服务器有一个很大的问题:我不能选择另一个字段作为字段!

例如:

SELECT
   [EnquiryID] AS "The_Key"
   FROM [db].[dbo].[table]

在我的管理应用程序中工作正常(即:不是PHP),但如果我在PHP环境中运行相同的程序,我会得到:

stdClass Object
(
    [PK_EnquiryID] => 1
)

您可以看到它应该是[The_Key] => 1

有谁知道我们怎么能绕过这个,拜托?我把头发撕掉了!

干杯

尼尔

2 个答案:

答案 0 :(得分:1)

我认为这在freeTDS列表中得到了解答,但问题在于PHP,它对ODBC进行了错误的调用,因此得到基表名而不是标签,这就是你需要的。

答案 1 :(得分:0)

这绝不是一个完美的解决方案,我很想学习处理这个问题的正确方法,但同时,在每个列之后添加

+''
列名,但在AS别名之前,您应该能够绕过此问题。