2

SQL Server データベース用に PHP で作成したクエリに、単語がテーブル名として認識されないという問題があります。PHP 2.0 (VC6) 用の SQL Server を使用しています。次のクエリは機能し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が正しいテーブル名です。二重引用符、角括弧、引用符/括弧なしなどを試してみましたが、役に立ちませんでした。これを修正する方法を知っている人はいますか?

* *更新:

これに対する解決策を見つけました。修正または回避策の回答の 1 つをご覧ください。

4

4 に答える 4

5

PHP またはドライバーで何かが起こっているに違いありません。SQL Server プロファイラーを使用して、送信されている実際のクエリを確認できるはずです。

いずれにせよ、それが何をしているのかわからない場合。これを回避策と見なすことができます。

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 ...

上記のクエリはOrder、SSMS では正常に機能していましたが、PHP からはテーブルに対してまったく機能していませんでした。他のすべてのテーブルdb_nameも適切にクエリされました。ビューを作成したり、エイリアスを使用しようとしましたが、どれもうまくいきませんでしたOrder

最初から思いついたはずですが、最終的に のような 1 つの列だけをクエリしようとしましたが[OrderID]、何を知っていますか? クエリの列名を 1 つずつリストする限り、機能します。MSSQL の列の 1 つが MySQL でサポートされていないと思います。そう、

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 に答える