【问题标题】:PHP + UnixODBC + FreeTDS - SELECT [field] AS [name] does not workPHP + UnixODBC + FreeTDS - SELECT [field] AS [name] 不起作用
【发布时间】:2012-05-22 19:08:08
【问题描述】:

我有一个安装了 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 库:是的
  • TDS 版本:8.0
  • iODBC:否
  • unixodbc:是的

我使用的是 unixODBC-2.3.1

MSSQL 2000 服务器很好,我可以运行所有 SQL 语句,并像使用 MySQL 一样使用 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

请问有人知道我们如何解决这个问题吗?我要扯头发了!

干杯

尼尔

【问题讨论】:

    标签: php sql sql-server freetds unixodbc


    【解决方案1】:

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

    +''
    到每一列,在基础列名之后,但在 AS 别名之前,您应该能够规避这个问题。

    【讨论】:

      【解决方案2】:

      我认为这已在 freeTDS 列表中得到解答,但问题在于 PHP,它对 ODBC 进行了错误调用,因此获取了基表名称,而不是在这种情况下您需要的标签。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-14
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-09
        • 2011-02-24
        相关资源
        最近更新 更多