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

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

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

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

Q&A

1回答

2892閲覧

phpとpostgresqlをPDOで接続したい

ariiiiiga

総合スコア66

PostgreSQL

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

0グッド

1クリップ

投稿2019/03/02 15:55

編集2019/03/09 02:45

前提・実現したいこと

PHP,Postgresqlをpdoで接続したいです。
PHPとMYSQLで作っていた検索機能のコードのDB接続部分を下記のようにPostgreSQL用に変更しました。
MYSQLの時は正常に動作していました。

現在このエラーが出ています。
SQLSTATE[HY000] [2002] Connection refused

該当のソースコード

<?php define('DB_USERNAME', 'myname'); define('DB_PASSWORD', '*****'); define('DSN', 'mysql:host=host; dbname=mydb; charset=utf8'); function db_connect(){ $dbh = new PDO(DSN, DB_USERNAME, DB_PASSWORD); return $dbh; } try { $dbh = db_connect(); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $statement = $dbh->query('SELECT * FROM data'); $statement = null; $dbh = null; } catch (PDOException $e) { header('Content-Type: text/plain; charset=UTF-8', true, 500); exit($e->getMessage()); }

補足情報(FW/ツールのバージョンなど)

windows10
php-7.3.2
PostgreSQL 11

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

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

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

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

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

m.ts10806

2019/03/02 22:43

接続時にport指定してもダメですか?
kunai

2019/03/03 02:01

まずもって、PHP以外のツールなどで「パスワードなしのrootアクセス」は可能なのでしょうか。
ariiiiiga

2019/03/04 04:45

port指定してもエラーはかわりませんでした。
m.ts10806

2019/03/04 04:52 編集

そうですか。正しく指定されたかは提示されてないので分かりませんが、私の方はport込みのほぼ同コードとでできてるので、環境の問題じゃないですかね。
m.ts10806

2019/03/04 04:56 編集

エラーもDBサーバーがlocalhostで実行されていること、port5432を受け入れているか確認してねってだけなので。あ、デフォルトは5432だからデフォルトと同じだとport指定しなくても大丈夫ですけど。
m.ts10806

2019/03/04 05:03

postgresql.confもいじったことないですし。
ariiiiiga

2019/03/04 05:24

ブラウザの画面エラーがでなく、真っ白になったのは成功でしょうか?
m.ts10806

2019/03/04 05:39 編集

それはわかりません。接続したいだけではないと思うのでそれを使って正否を確かめるコードを別途追記してください (何の前触れもなくコメントされても何をしてそこに至ったかは教えてほしいなあ。)
m.ts10806

2019/03/04 05:40

今のコードを追記されないと何とも。だって今質問に提示されてるコードってエラーが出るコードなんですよね? 環境問題なのであれば何をどうしたのかきちんと書いてください。自分だけ片付けばいいというスタンスでは誰もアドバイスをしません。
ariiiiiga

2019/03/07 02:36 編集

<?php $dsn = 'pgsql:dbname=mydb;host=myhost'; $user = 'mydb'; $password = 'mydb'; try { $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo '接続成功'; } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); }
m.ts10806

2019/03/07 02:35

質問を編集して追記してください。こちらに投げられても再現確認にはなりません。それにそのホストとパスワードは全世界に公開していいものですか?
ariiiiiga

2019/03/07 02:35

このコードで接続成功とブラウザで表示されています。 これは接続できているのでしょうか?
m.ts10806

2019/03/07 05:37

実際に存在するデータに対してSELECTをかけてみてはいかがでしょうか。 一応そのPDOのnewした結果をvar_dump()で確認もしてみてください。
ariiiiiga

2019/03/08 11:43

SQLSTATE[08006] [7] invalid connection option "charset" selectしたらこのエラーがでました。
m.ts10806

2019/03/08 13:53

なぜ勝手に記述を追加したのでしょうか。しかもそこselect関係ないし・・ 自分で勝手に追加したのですからきちんとわかって追加したんですよね? select関係ないところで自分で勝手に追加した記述が原因なのにselectのせいにする意味が分からないです。 無駄に問題を引き延ばしてどうしたいんですか?
ariiiiiga

2019/03/09 02:46

こっちですか?
m.ts10806

2019/03/09 08:21

丸投げという認識はありますか?ないなら早急にもたれたほうが。 誰も回答しなくなります。
退会済みユーザー

退会済みユーザー

2019/03/09 11:47

Postgreに繋ぐことが目的なのに、なぜMySQLの方のコードを提示いてるの? これで解決につながるわけないじゃん
ariiiiiga

2019/03/12 07:23

SQLSTATE[08006] [7] invalid connection option "charset" mysql部分をpgsqlに変えてこのエラーが出るんですけどわかりますか?
m.ts10806

2019/03/12 07:28 編集

以前から注意されてると思いますが、こちらの指摘を無視する人にできる具体的なアドバイスはありません。 ※回答に移動しました。
guest

回答1

0

PDO::__construct

返り値

成功時に PDO オブジェクトを返します。
エラー / 例外
PDO::__construct() は、 指定されたデータベースへの接続に失敗した場合、 PDOException を投げます。

つまり、成功していればインスタンスはPDOオブジェクトであるはずなので、
PDOExceptionが投げられていないのであれば、var_dump()で生成したインスタンスを確認すればPDOオブジェクトであるはず。

ただ、「接続した」だけだと何もならないので、念のためデータが1件以上ある実在するテーブルに対してSELECT文を実行して、きちんとデータが取得できるところまで確認できて「成功した」とした方が良いです。


「エラーが出た」→「じゃあ質問投げよう」
という丸投げに応えるサイトではありません。
下記のような記事を読むと分かりますが、
本来はこの記事のように調べて対策して、それでも解決できないときに利用するものです。

正直、質問するより自分で調べた方が絶対に早いですよ。
調べ方を聞くならまだOK。調べ方分かれば他人を頼ることなく迅速な解決が可能。
ロジックに悩んでいるわけではないのが明らかなら、自分で調べた方が早いです。

投稿2019/03/07 05:48

編集2019/03/12 07:31
m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問