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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

Q&A

解決済

1回答

1377閲覧

phpにてpostgreSQL

amaguri

総合スコア227

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

0グッド

0クリップ

投稿2016/12/27 08:01

編集2016/12/27 11:46

phをつかい
postgreSQLにて
SQLを走らせる前に
テーブルに対してインサート可能かどうかを判断するような処理を書きたいのですが、
phpにて
格納先のデータベース及びカラムにインサートができるかの確認を行うことは可能でしょうか?

abcテーブルの
bananaカラム、chocolateカラム、strawberryカラムに
インサートで
黄色、茶色、赤色
というデータをインサートとするクエリを書く前に
確認できればなと思っています。

追記
インサート不可の状態として
「サーーバーの接続不可」、「クエリを実行して値の代入ができない状態」を考えています。
サーバーの接続不可のチェックは
わかるのですが
「クエリを実行して値の代入ができない状態」に関してインサート可能なのかの結論が考えられていませんでした。

考えていたのは
「クエリを一度、結果を反映はしないが実行してエラーにならないか?」
を考えていました。

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

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

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

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

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

maisumakun

2016/12/27 08:06

「インサート可能」という語を使っていらっしゃいますが、その逆となる「インサート不可能」な状況としてはどのようなことを考えていらっしゃいますでしょうか。「サーバの接続断」「データ型の違い」「UNIQUE制約」「外部キー制約」「テーブルロック」など、何に対して「インサート可能」を考えるかで結論が違ってきます。
guest

回答1

0

ベストアンサー

基本的に、SQLを走らせる前にDBにインサートができるかどうかのチェックは、
DBが立ち上がっているか、やDBサーバーに接続できるか等のことを指すのでしょうか。

データの重複チェックという意味であれば、SQLを1度実行して、対象データがあるかどうかをチェックしなければなりません。
例えば

SQL

1SELECT count(*) FROM abc WHERE banana = '~~~' AND chocolate = '~~~' AND strawberry = '~~~';

でカウントが1以上であれば、同じレコードが存在するのでインサートしないという判断の方法です。

投稿2016/12/27 11:06

s.t.

総合スコア2021

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

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

amaguri

2016/12/27 11:48

回答ありがとうごいます、質問があやふやで申し訳ありません。 考えていたのは「クエリチェック」のようなそのクエリが実行可能なのかを見る方法などがあればしりたいなとおもっていました。
s.t.

2016/12/28 01:01 編集

一応方法はあるのですが、 まず、DB接続についてはPDOで接続を試み、try~catchで判断する方法です。 $dsn = 'pgsql:dbname=uriage host=localhost port=5432'; $user = 'pguser'; $password = 'pguser'; try{ $dbh = new PDO($dsn, $user, $password); }catch (PDOException $e){ print('Error:'.$e->getMessage()); die(); } また、テーブルが存在するかについては、 上記で接続確認後に SELECT relname FROM pg_class WHERE relkind = 'r' AND relname = 'テーブル名'; で存在確認はできるようです。 ただ、こんなの実務でみたことがないので、 INSERTできなかったらエラーメッセージを出して何が悪いのかを判断したほうが一般的のような気もします。
amaguri

2017/01/05 00:42

お返事が年を開けてしまいましてすみません。 素直にコードを走らせてダメだった場合にエラーが出る処理で書きたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問