質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.42%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

11229閲覧

SQLserverからのデータ取得で「Invalid column name 'N'」になる

YudaiSu

総合スコア0

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/09/22 15:04

すでに開発が完了し運用がされている既存サービスの、改良版の開発に途中から参加しています。ローカルPCで開発環境を整えるため、FuelPHPで作成された既存サービスのソースコードをcloneし、windows機上にインストールしたVirtual box + vagrantを用いて以下の仮想環境を整えました。

  • CentOS 7.4
  • Apache 2.4.6
  • PHP 7.3.22
  • Microsoft SQL server 2017

DBとの接続のため、仮想環境上にmicrosoftのODBC driver 17 for SQL serverをインストールしています。また、既存サービスの開発環境で使用されていた、DBのテストデータ (.bacpacファイル) を受け取り、SQL Server Management Studioからデータのインポートを行いまいた。

以上のように開発環境を整えた後、http://192.168.33.10にアクセスしてフロントページの表示を確認できています。そこから、サービスの管理者画面に遷移するためログインを行ったところ、以下のようなエラーが出て画面遷移が完了しません。なお、遷移後の画面は、管理しているユーザのデータ一覧のようなものをDBから読み込んで表示する画面となっています。

Fuel\Core\Database_Exception [ 42S22 (207) ]: SQLSTATE[42S22]: Column not found: 207 [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid column name 'N'. (SQLExecute[207] at /builddir/build/BUILD/php-7.3.22/ext/pdo_odbc/odbc_stmt.c:259) with query: "SELECT t0.id AS t0_c0, t0.grouping_id AS t0_c1, t0.watcher_id AS t0_c2,... (以下同じように続くので中略)...t2.updated_at AS t2_c15 FROM grouping_watchers AS t0 LEFT JOIN groupings AS t1 ON (t0.grouping_id = t1.id) LEFT JOIN watchers AS t2 ON (t0.watcher_id = t2.id) WHERE t2.account_id = N"

エラーの中身が長くなってしまい恐縮ですが、要するにInvalid column name 'N'というエラーだと思っています。SQLserverでは日本語文字のインサートの際、'N'を頭に付ける (参考: SQLServerに日本語データをInsertすると文字化けする。 - あとらすの備忘録) ということはわかりましたが、実際どうすればこのエラーが解消するのかわかりかねています。

情報が少なく答えにくい質問となってしまっているかもしれませんが、何か少しでもヒントになることや試してみるとよいこと等ご教示いただけると嬉しいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Invalid column name 'N'というエラーが示している箇所は以下だと思います。
WHERE t2.account_id = N

'N'ではなくてNなのでカラムだと解釈されています。

ローカル変数なら
WHERE t2.account_id = @N
のように**@**を付けて記述します。

SQL

1SELECT t0.id AS t0_c0, t0.grouping_id AS t0_c1, t0.watcher_id AS t0_c2 2 ,... (以下同じように続くので中略)...t2.updated_at AS t2_c15 3FROM grouping_watchers AS t0 4 LEFT JOIN groupings AS t1 5 ON (t0.grouping_id = t1.id) 6 LEFT JOIN watchers AS t2 7 ON (t0.watcher_id = t2.id) 8WHERE t2.account_id = N -- ←ココ

投稿2020/09/22 16:42

sazi

総合スコア25256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

何か少しでもヒントになることや試してみるとよいこと等ご教示いただけると嬉しいです。よろしくお願いします。

実行したクエリ等が質問文に含まれないため誤解しているであろうことの指摘に留めますが

SQLserverでは日本語文字のインサートの際、'N'を頭に付ける

'N'ではありません。

対象のカラムのデータ型が nchar や nvarchar の場合に、N'あ'のように、文字列に対するクオート''の前にNを付ける必要がある、という意味です。

詳細は公式リファレンス等を参照して勉強してください。

投稿2020/09/22 15:39

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.42%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問