2

我在 PHP 中为 SQL Server 数据库编写的查询遇到了一个单词未被识别为表名的问题。我将 SQL Server 用于 PHP 2.0 (VC6)。以下查询Order在 SQL Server Management Studio 中执行时有效并返回表中的所有订单。

SELECT * FROM "db_name"."dbo"."Order" (also tried using brakets [] around table name)

在 PHP 中,我收到以下错误:

[0] => Array
    (
        [0] => IMSSP
        [SQLSTATE] => IMSSP
        [1] => -35
        [code] => -35
        [2] => Invalid type
        [message] => Invalid type
    )

此查询适用于数据库中所有其他表的 PHP 代码,db_name.. 它只是不适用于 table Order,这是正确的表名。我尝试了双引号、方括号、无引号/括号等,但均无济于事。有谁知道如何解决这个问题?

* *更新:

我找到了解决方案。请查看修复或解决方法的答案之一。

4

4 回答 4

5

PHP 或您的驱动程序中一定发生了某些事情。您应该能够使用 SQL Server Profiler 查看正在提交的实际查询。

无论如何,如果您无法找出它在做什么。您可以将此视为一种解决方法:

CREATE VIEW dbo.MyOrder
AS
SELECT * FROM [Order]

继续前进——生命太短暂了。

于 2012-06-15T19:45:04.840 回答
1

好吧,我找到了解决问题的方法。这是我的规格:

  • Windows 7 64 位
  • PHP 5.3 VC9 编译(在尝试解决此问题时从 VC^ 版本更新)
  • 驱动程序:SQL for PHP 2.0 (VC9)
  • 我试图从中提取数据的表名:[Order]
  • 我正在使用的查询:SELECT * FROM [db_name].[dbo].[Order] WHERE ...

上面的查询根本不适用于OrderPHP 中的表,而它在 SSMS 中运行良好。查询中的所有其他表db_name也很好。我尝试创建视图或使用别名,但没有一个适用于Order.

我应该从一开始就想到这一点,但我最终尝试只查询一列,比如[OrderID],你知道什么?只要您一一列出查询中的列名,它就可以工作。我相信 MySQL 不支持 MSSQL 中的列之一。所以,

SELECT [OrderID],[OrderNumber],... FROM [db_name].[dbo].[Order] WHERE ...

工作得很好!我希望这将在未来为某人节省一些痛苦。

于 2012-06-25T17:02:58.957 回答
1

当查询返回 PDO 无法处理的列类型时,会发生此错误。例如,当您尝试

SELECT default_value FROM sys.parameters

因为该列是 sql_variant 类型。如果有意义,不如将该列转换为 varchar 或其他内容,或者从查询中删除它。

可能在您的情况下发生的事情是该表上有一个奇怪类型的列,当您明确命名所需的列时,该列被消除了。

于 2014-04-01T09:19:51.797 回答
0

表不能命名为“order”:这是SQL 中的保留字

在很多情况下,您可以在引号(或反引号)之间使用此名称,但您总是会遇到无法处理的情况。重命名此表。

如果你不能尝试别名它:

SELECT * FROM "db_name"."dbo"."Order" as ord
于 2012-06-15T18:57:07.047 回答