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

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

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

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

Q&A

解決済

4回答

1441閲覧

共通のエラーコードとドライバーとは

aaaaaaaa

総合スコア501

PHP

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

0グッド

0クリップ

投稿2016/07/04 11:27

PHPでPDO::errorInfo()メソッドが返す配列のうち添え字が0番目にあたる「共通のエラーコード」と1番目にあたる「ドライバー固有のエラーコード」があります。
この共通のエラーコードの「共通」は、何が共通なのでしょうか。また1番目のドライバーとはいったい何のことを指すのでしょうか。

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

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

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

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

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

guest

回答4

0

共通のエラーコードについては
PHPマニュアル
での説明が適切かと思います。

SQLSTATE エラーコード (これは、ANSI SQL 標準で定義された英数 5 文字の ID)

ですから、「SQLの仕様として共通」のエラーコードです。

ドライバーとは、個別のRDBMSのドライバーの事で、
ドライバー固有のエラーコードとは、その時接続しに行っている
RDBMSドライバー特有のエラーコードです。

MySQLならMySQL特有のエラーコード、PostgreSQLならPostgreSQL特有のエラーコードが返却されます。

投稿2016/07/04 11:39

tanat

総合スコア18709

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

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

aaaaaaaa

2016/07/05 02:39 編集

ご回答有難うございました。 PHPマニュアルは、質問前に閲覧しましたがよく理解できなかったため投稿しました。 >>SQLSTATE エラーコード (これは、ANSI SQL 標準で定義された英数 5 文字の ID) とくにこの文章の意味が良く理解できませんでしたが、SQL共通のエラーコードを意味するのですね。
guest

0

ベストアンサー

PDOは、接続する先のDBがMySQLであってもPostgreSQLであってもOracleであっても、できるだけ同じようにアクセスできるようにするためのインターフェイスです。

実際にはPDOの中で、接続する先のDBに合わせたドライバーを利用して接続しています。
DBによって特有の機能等もあるため、そういった機能は「ドライバー固有の」機能となります。
そういった機能で発生したエラーは「固有のエラー」です。

ドライバーによらず、例えば明らかにパラメータが足らない、などのエラーはドライバーによらないので「共通のエラー」になります。

投稿2016/07/04 11:36

kaz.Suenaga

総合スコア2037

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

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

aaaaaaaa

2016/07/05 02:36

ご回答有難うございました。 PDOクラスの中にドライバーがいるのですね。
kaz.Suenaga

2016/07/05 03:35

kopioさんのコメントにあるとおり、PDOクラスの中にあるのではなくPDOから適切なドライバーを操作してデータベースにアクセスしています。 ドライバー自体が別のオブジェクトとお考えください。
aaaaaaaa

2016/07/05 11:27

ご返答有難うございました。 なるほど、PDOから操作をしてDBに接続しているのですね。 しかし、こちらのサイトを見るとPDOの一部としてドライバーをphpに同梱していると記述してあります。たまたま同じ場所に梱包されているだけで、二つは、独立したものであるとの認識で合っておりますか。 >>http://www.atmarkit.co.jp/ait/articles/1111/11/news136.html >>PDOを使うには、PDOエクステンションと各データベースのクライアントライブラリを橋渡しするドライバが必要です。ドライバはPDOの一部としてPHPに同梱されています。有名なDBMSなら大体の場合、PDOを利用できます。一方、ドライバが存在しない場合は、そのDBMSではPDOは利用できません。
kaz.Suenaga

2016/07/05 11:35

上記の文章を整理すると、 PDO = PDOエクステンション + 各DBのドライバ ということですよね。 そういうことです。
guest

0

共通のエラーコード はANSI SQLで定義されたSQLSTATEが入ります。

ドライバーとはデータベースに接続するためのミドルウェアのことです。
基本的に接続するデータベースごとに異なります。

http://php.net/manual/ja/pdo.errorinfo.php

投稿2016/07/04 11:36

kopio

総合スコア487

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

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

aaaaaaaa

2016/07/05 02:34 編集

ご回答有難うございました。 ミドルウェアという単語は、OSとアプリケーションの間に割って、これらの中間的な位置に存在していてさまざまなソフトウェアに対して汎用的な機能を提供するもの、であると情報処理に関するサイトに記述がありました。 つまり、DBに接続するときに複数あるリレーショナルデータベースマネージメントシステムの違いを吸収し、簡単な接続方法を提供してくれるPDOクラスそのものがドライバーですか。 それともPDOクラス内の何かがドライバーですか。
kopio

2016/07/05 02:47

ざっくりですが、こんな感じで考えておけばいいかと思います。 ユーザーのプログラム ↑ ↓ PDO (データベースの種類に関らず共通のAPIをプログラム側に提供) ↑ ↓ ドライバー(実装はデータベース毎に異なるがPDOのAPIに合わせたAPIを提供) ↑ ↓ データベース
guest

0

PDO::errorInfo()

そのまま検索すれば、マニュアルが出てきて、

0 SQLSTATE エラーコード (これは、ANSI SQL 標準で定義された英数 5 文字の ID)

1 ドライバ固有のエラーコード
2 ドライバ固有のエラーメッセージ

と書いてありますが、これでは不足ですか?

さらに検索すれば、SQL State Error Codes という情報が見つかりますね。

ドライバもマニュアルにあります。
PHP: PDO ドライバ - Manual

各DBに対応した接続を行うためのドライバだと思います。

ちょっと検索すればでてくることや、公式のマニュアルに載っていることは最低限調べてから質問したほうが、自分のためにもなると思いますよ ^^

その上でわからないことを聞くのは、みんな疑問に思うことかも知れないので役に立つ質問になると思います。

投稿2016/07/04 11:41

Mr_Roboto

総合スコア2208

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

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

Mr_Roboto

2016/07/04 11:42

って、みんな早いなぁ・・・w
aaaaaaaa

2016/07/05 02:39

ご回答有難うございました。 PHPマニュアルは、投稿前に閲覧しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問