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

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

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

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

610閲覧

PHP pdoを使ったDB接続の際の書き方

kani-toto

総合スコア16

PDO

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/03/28 00:34

PHP初心者です。DB接続の際、私が使っている書籍だと、

<?php try { $pdo = new PDO('mysql:host=localhost;dbname=name;charset=utf8', 'user', 'password', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]); $rows = $pdo->query('select * from users')->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { exit($e->getMessage()); } ?>

というような記述と、'password'以降の[]の部分がないものがありますが、
[]の部分は現在省略可能なのでしょうか?
それとも個人開発するとしても、上記かそれ以上のものが必要なのでしょうか?
初歩的な質問で申し訳ありませんが教えてください。
よろしくお願いします。
PHP7.3

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

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

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

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

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

hoshi-takanori

2020/03/28 02:02

new PDO() の際にはその [〜] はあってもなくてもエラーがあれば例外が投げられます。 その後の $pdo->query() などでエラーが発生した時の挙動が変わってくるはず。 ところで例外処理は分かりますか?
kani-toto

2020/03/28 02:25

なんとなくですかね。もっと勉強します。
guest

回答2

0

ベストアンサー

'password'以降の[]の部分がないものがありますが、

[]の部分は現在省略可能なのでしょうか?

記述の仕様としては省略可能です。
デフォルト値は違うため、設定しています。
こういったものは、マニュアルを確認すると良いです。

PDO::__construct

また、array $optionsPDO::setAttribute で指定することも可能です。

以下余談
php のマニュアルは大変良くできていますが、PDO に関しては情報がちょと足りていない箇所があります。

初学者の間は、以下のテンプレートを使用しておくと良いです。
PHP で MySQL 接続時に必要な知識(最小限版)

余裕ができたらこちらも合わせて読むと良いです。
PHPでデータベースに接続するときのまとめ

投稿2020/03/28 02:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION

この部分が何をしているのか、調べてみましたか?

無くても動くかどうかは、これを省略して実際に動かしてみたらよいのでは?

また、無くても動く のと 無くても問題ない は違います。

意味をきちんと理解すれば、このような質問は出てこないと思いますが。

######以下、コメントを受け追記
PHPマニュアル
https://www.php.net/manual/ja/pdo.error-handling.php

公式に「エラーモードの記述は省略可能」とは謳われてないですよね?
省略したことないんで断言はしませんが、デフォルトのモードがPDO::ERRMODE_SILENTとなっているので、まぁ省略してもERRMODE_SILENTになるのでしょう。

その上で、

注意:PDO::__construct() は、接続に失敗した場合は常に PDOException をスローします。 これは、現在設定されている PDO::ATTR_ERRMODE が何であっても同じです。例外を処理しないと、fatal エラーとなります。

とあるので、「接続に失敗した場合」については敢えてエラーモードを指定していなくても(SILENTであっても)catch (PDOException $e)が生きてきますが、逆に言うと接続失敗以外のエラーの場合にはPDOExceptionがスローされていないのでエラーをcatchした処理はできませんよね?

お使いの書籍がなんなのかわかりませんが、接続する「だけ」の場合は、エラーモードの指定は省略しても問題ないでしょう。接続失敗以外のエラーは出ないでしょうから。

質問のようにクエリをなんらか投げるのなら、接続失敗以外のエラーをちゃんと捕まえられるようにエラーモードの設定は必須になります。

PHPマニュアルが読めれば出てこない質問です。
(意味をきちんと理解する=PHPマニュアルちゃんと読もう ということです)

投稿2020/03/28 00:46

編集2020/03/28 01:51
Take_it

総合スコア357

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

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

kani-toto

2020/03/28 00:58

SQLでエラーがあった時の処理方法の指定というのは調べたのですが、書いてない本があってもしかしたら今はインスタンス生成の際にそこまでケアされているのかもしれないと考えてしまったのです。 わかりずらくてすみません。
kani-toto

2020/03/28 02:29

ありがとうございます。もっとちゃんと読んでみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問