スレッド表示 | フラット表示〕 全トピック 920 件中 362 番目 次≫ ≪前

SQL文が実行できない

created: 2005-09-27 12:43 | modified: 2005-09-29 13:41 | reply: 7

[2569] SQL文が実行できない

user: ごまゴマ | created: 2005-09-27 12:43
こんにちは。

PostgreSQLからデータを持ってきたいのですが、
例えば「select * from "AAAAA"."BBBBB";」というSQL文を実行した場合は、
どのように書けば実行されるのでしょうか?
このまま実行してもエラーになりますし、”を’にしてもエラーになってしまいます。

どなたか分かる方がご教授お願いいたします。
reply: 2572 返信 編集 削除

[2572] Re: SQL文が実行できない

user: ぱぴよん | created: 2005-09-27 16:16
ごまゴマさんはじめまして、ぱぴよんと申します。

私はSQLにあまり詳しくないのでお力になれないかもしれません^^;


> 例えば「select * from "AAAAA"."BBBBB";」というSQL文を実行した場合は、
> どのように書けば実行されるのでしょうか?

これはどういった意図でのSQL文でしょうか?

SELECT * FROM テーブル名;
で指定されたテーブルから全レコード(全列)を取得することができます。


「AAAAA」と「BBBBB」が別テーブルで2つのテーブルを結合して全レコードを取得したいということであれば、
上記のような書き方では取得できません。
(「"AAAAABBBBB"というテーブルは存在しません。」となると思います)

「AAAAABBBBB」という名前のテーブルでしたらごまゴマさんの記述でよいと思います。
ただし、"SELECT * FROM AAAAA"."BBBBB"というようにしなければなりません。


結合ということでしたら下記の「テーブルの結合」が参考になるかもしれません。
http://www.techscore.com/tech/sql/index.html
※データベースによってSQLの構文が多少変わったりしますので、
上記サイトがお役に立つかは分かりません。
Parent: 2569  reply: 2574 返信 編集 削除

[2574] スキーマ名を指定したSQL文なんですが・・・

user: ごまゴマ | created: 2005-09-27 16:55
こんにちは。はじめまして。

>> 例えば「select * from "AAAAA"."BBBBB";」というSQL文を実行した場合は、
>> どのように書けば実行されるのでしょうか?
>これはどういった意図でのSQL文でしょうか?
データベースはpostgreSQLを使用しているのですが、AAAAA=スキーマ名でBBBBB=テーブル名になっています。
これをPostgreSQLで実行すると、うまく結果が返ってくるのですが、これをPHPで使用しようとすると、SQLが実行されないようなエラーになります。

通常、PostgreSQLのカレントスキーマ(?)はpublicに設定されているようで、これを変更してやれば、「select * from BBBBB;」でいけると思うのですが、カレントスキーマを変更することができないので、こういった方法をしています。

何か回避できる方法があればいいのですが・・・
Parent: 2572  reply: 2576 返信 編集 削除

[2576] Re: スキーマ名を指定したSQL文なんですが・・・

user: ぱぴよん | created: 2005-09-27 17:32
> データベースはpostgreSQLを使用しているのですが、AAAAA=スキーマ名でBBBBB=テーブル名になっています。

すみません。勘違いをしていたようです^^;

◆直接SQLに文字列を組み込む場合
$SQL = "SELECT * FROM AAAAA.BBBBB";


◆変数となっている場合
$Schema = "AAAAA";
$Table = "BBBBB";
$SQL = "SELECT * FROM {$Schema}.{$Table}";

で思惑通り動作するでしょうか(;^_^A
Parent: 2574  reply: 2585 返信 編集 削除

[2585] 同じエラーになってしまいます

user: ごまゴマ | created: 2005-09-27 18:58
ありがとうございます。

早速、試してみたのですが、どちらも同じようにselect文が実行できなかったエラーになりました。

PostgreSQLで直接SQL文を実行してもダメでして、やはり「SELECT * FROM "AAAAA"."BBBBB";」でなければ実行されないみたいなのですが・・・・
Parent: 2576  reply: 2588 返信 編集 削除

[2588] 混乱しています

user: ぱぴよん | created: 2005-09-28 09:18
すみません、混乱してしまいました^^;

◆1番最初の投稿
> PostgreSQLからデータを持ってきたいのですが、
> 例えば「select * from "AAAAA"."BBBBB";」というSQL文を実行した場合は、
> どのように書けば実行されるのでしょうか?
> このまま実行してもエラーになりますし、”を’にしてもエラーになってしまいます。

◆現在の投稿
> PostgreSQLで直接SQL文を実行してもダメでして、やはり「SELECT * FROM "AAAAA"."BBBBB";」でなければ実行されないみたいなのですが・・・・


この2つの文が矛盾しているように感じたのですが、私の勘違いでしょうか。

SELECT * FROM "AAAAA"."BBBBB";
これは思惑通り実行されるのでしょうか。それとも実行されないのでしょうか。
またスクリプトでは実際にどのように書いているのでしょう。
その部分のソースを掲載してみてください。

「.」をSQL文の中に組み込みたい と解釈していたのですが、間違いでしょうか。
一度、実際に実行されているSQL文をprintやecho、var_dumpで確認してみてください。
ごまゴマさんが期待しているSQL文となっているでしょうか。
Parent: 2585  reply: 2594 返信 編集 削除

[2594] 変なこと書いてしまってすいません(^^;

user: ごまゴマ | created: 2005-09-29 11:54
すいません、ややこしい書き方をしてしまいました。
ちょっと簡単にまとめますと・・・

PostgreSQLで「SELECT * FROM "AAAAA"."BBBBB";」を実行すると問題なく結果が表示されます。
しかし、「SELECT * FROM AAAAA.BBBBB;」や「SELECT * FROM BBBBB;」などで実行するとエラーになってしまいます。

ここからPHPでの話になります。
例えば
-------------------------------------------------------
$con = pg_connect("host=localhost dbname=test_db user=goma");
$sql=(SELECT * FROM "AAAAA"."BBBBB");
$test=pg_query($con,"$sql");
-------------------------------------------------------
このようなPHPを実行すると、SQL文が実行されません。
2行目を「$sql=("SELECT * FROM 'AAAAA'.'BBBBB'");」にしてもダメでした。

>「.」をSQL文の中に組み込みたい と解釈していたのですが、間違いでしょうか。
どちらかというと「”」を含んだSQL文をPHPで実行したいと言ったほうが正しいかもしれないです。
何か特殊な書き方があるのかなぁと思ったので・・・
Parent: 2588  reply: 2595 返信 編集 削除

[2595] エスケープ文字「\」を用います。

user: ぱぴよん | created: 2005-09-29 13:41
> $sql=(SELECT * FROM "AAAAA"."BBBBB");
> $test=pg_query($con,"$sql");

特殊な書き方をされているようですね^^;

$sql="SELECT * FROM "AAAAA"."BBBBB"";
$test=pg_query($con,$sql);
このように書いてみてください。

ただし、このままでは
Parse error: syntax error, unexpected T_STRING in PHPファイルのパス on line 行数
といったエラーが発生します。

「"」を""で囲った文字列の中で使用したい場合は「"」をエスケープしてあげる必要があります。
("\""のように)
※「' '」中の「'」も同じように「' \' '」としなければなりません。
$sql="SELECT * FROM \"AAAAA\".\"BBBBB\"";
$test=pg_query($con,$sql);

このSQLを実行すると
SELECT * FROM "AAAAA"."BBBBB"
というものが実行されますが、間違いないでしょうか。
Parent: 2594  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 362 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑