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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PDO

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

PHP

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

Q&A

解決済

1回答

944閲覧

PHP PDOでのDB(Oracle、MySQL)へ接続する場合の仕組みを教えて下さい。

PII-Common

総合スコア5

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PDO

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

PHP

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

0グッド

0クリップ

投稿2020/02/03 04:10

編集2020/02/03 05:20

いつもお世話になっております。

現在、Windows + Apache + PHP + Oracle + MySQLのシステムを保守しております。
上記システムのDB(Oracle、MySQL)のバージョンアップを行う予定があり、バージョンアップに伴う影響調査をしております。
PHPからDBへの接続はPDOを使用しています。

具体的には
現行:PHP(v5.2.13) + Oracle11g + MySQL(5.0.91)
移行後:PHP(v5.2.13) + Oracle12c + MySQL(5.6)
となります。

バージョンアップの目的としましてはWindowsServer2008⇒WindowsServer2016へのバージョンアップが大きな目的となります。
OSのバージョンアップに際し、WinSrv2016では動作保証のないOracleとMySQLを動作保証のあるバージョンへ更新を行います。

質問させて頂きたいことは以下です。

①PDOでのDB接続の仕組みについて
PDOを利用してDBへ接続する場合、以下のA、Bどちらの経路で接続しているのでしょうか?

A:PHP→PDO→DB API→DB
B:PHP→PDO→DB

Aルートの場合、DB APIは何を使用しているのでしょうか?
また、その場合はDB接続はAPIにて行う為、APIさえ新しければ古いPHPからもDBへ接続できるのでしょうか?

Bルートの場合、PHPが古い場合、新しいバージョンのDBへ接続できなくなるのでしょうか?

PHP(PDO)マニュアルを確認しましたが、知りたい情報を見つけることはできませんでした。

以上、上記内容についての有識者がいらっしゃいましたら、
ご回答いただけると助かります。

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

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

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

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

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

m.ts10806

2020/02/03 04:14

そもそもPHP5.2が変わらない時点でお話にならない可能性もありますけど、なぜDBだけアップグレードするのでしょうか。
PII-Common

2020/02/03 04:34 編集

m.ts10806 さん コメントありがとうございます。 投稿内容に情報が載せられておらず、申し訳ございません。 当Webシステムのバージョンアップを行う目的としては、WindowsServer2016へのバージョンアップが根底にあります。 WinSrv2016へのバージョンアップを行うに際し、WinSrv2016に対応していない現行のOracle、MySQLのみのバージョンアップを考えています。
PII-Common

2020/02/03 04:39

Orlofsky さん コメントありがとうございます。 セキュリティ面でのリスクについても見過ごせませんが、まずはWinSrv2016での動作を確認したいと思っています。
Orlofsky

2020/02/03 04:47

サポート契約がないと正式なドキュメントは見られないようですが、 https://www.hitoriit.com/entry/2019/06/10/080200 Oacle12.2.0.1 でも 2020/11/20 Pathching Ends Pathching Ends どんなに大きなバグが発覚してもパッチは提供しない なので、今からOracleのバージョンアップは18か19でしょう。Oracle12はあり得ません。 なお、サポート契約が有効でしたらOracle Databaseのライセンスのバージョンアップは無料です。
m.ts10806

2020/02/03 04:50

質問は編集できるので適宜ご対応いただければと
PII-Common

2020/02/03 05:14

m.ts10806 さん コメントありがとうございます。 質問に不足している情報を追記させていただきます。
guest

回答1

0

ベストアンサー

以下のA、Bどちらの経路で接続しているのでしょうか?

データベースの種類や設定によります。

Oracleの場合は、Oracleのクライアントライブラリを用意する必要があります(PHPマニュアル)。

MySQLの場合は、mysqlndとしてPHP自体にMySQLとの接続ライブラリが組み込まれています。機能性やライセンスなどの問題を考えると、これを使うのがたいていのばあいに適切ですが、あえてMySQL側の接続ライブラリを使いたい場合はそれも可能です(PHPマニュアル)。

投稿2020/02/03 04:19

maisumakun

総合スコア146018

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

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

maisumakun

2020/02/03 04:19

しまった、PHP 5.2だったか…(mysqlndの登場はPHP 5.3)
m.ts10806

2020/02/03 04:24

PHPをバージョンアップさせるほうが先な気がします。 そっちのほうがセキュリティリスク高いですし
PII-Common

2020/02/03 04:57

maisumakunさん ご回答ありがとうございます。 PHPからOracleへ接続する場合、PDO_OCIとOCI8があるかと思いますが、どちらにもOracleクライアントライブラリが必要ということでしょうか? 当システムはPDOにて接続しています。 PDOのマニュアル(https://www.php.net/manual/ja/pdo.requirements.php)に「外部ライブラリを必要としません。」と記載されている部分も気になっております。 ⇒Oracleは必要だけど、それ以外は必要なしということでしょうか? PDO_OCI、OCI8ともにクライアントライブラリが必要となると、使用しているAPIはご存知でしょうか? ⇒.NETの場合、OracleDataAccess.dll(ODP.NET)が使用されていますが、PHP用のライブラリがあるのでしょうか? MySQLについては、PHP 5.2の場合だと外部ライブラリを使用せず、PHP(PDO)のみで接続しているのでしょうか? PHPの知識が乏しく、分からないことだらけで申し訳ございません。 上記内容について、ご回答いただけると助かります。
maisumakun

2020/02/03 05:19 編集

> PDOのマニュアル(https://www.php.net/manual/ja/pdo.requirements.php)に「外部ライブラリを必要としません。」と記載されている それは「PDOそのもの」に外部ライブラリが不要という話です。データベースごとのライブラリは別個で必要かもしれません。 > .NETの場合、OracleDataAccess.dll(ODP.NET)が使用されていますが、PHP用のライブラリがあるのでしょうか? いえ、C言語用のライブラリを使います。PHP-C言語を結ぶ部分はPHP拡張として用意されています。 > MySQLについては、PHP 5.2の場合だと外部ライブラリを使用せず、PHP(PDO)のみで接続しているのでしょうか? いえ、逆です。PHP 5.2ではMySQL用の接続ライブラリ(C言語)を組み込むのが必須です。
PII-Common

2020/02/03 05:45

maisumakun さん ご回答ありがとうございます。 > それは「PDOそのもの」に外部ライブラリが不要という話です。データベースごとのライブラリは別個で必要かもしれません。 PDO自体を使用するのに外部ライブラリは不要との意味ですね。 理解しました。 > いえ、C言語用のライブラリを使います。PHP-C言語を結ぶ部分はPHP拡張として用意されています。 > いえ、逆です。PHP 5.2ではMySQL用の接続ライブラリ(C言語)を組み込むのが必須です。 上記について、確認させてください。 以下のようなイメージということでしょうか? PHP │ │ (PHP-Cを結ぶPHP拡張を使用) ↓ Oracleライブラリ(C言語用)/MySQLライブラリ(C言語用) ↓ OracleDB/MySQL すみませんが、上記内容について以下の2点ご存知ならご回答いただけると助かります。 ①PHP-Cを結ぶPHP拡張とは何でしょうか? ②OracleのC言語用のライブラリとはORACLE_HOME\ ... \client_1\ociフォルダ内のファイルのことでしょうか? 色々と質問して申し訳ございませんが、よろしくお願いいたします。
maisumakun

2020/02/03 05:53

> ①PHP-Cを結ぶPHP拡張とは何でしょうか? 書いてのとおりなのですが、逆に何が疑問なのか、もう少し掘り下げていただけないでしょうか? (Oracle+PHPの環境を使ったことがないので、②は省略します?)
PII-Common

2020/02/03 06:32

maisumakun さん 意図が分からない質問をしてしまい、申し訳ございません。 目的としては、PHP v5.2 + Oracle11g + MySQL v5.0 → PHP v5.2 + Oracle12c + MySQL v5.9へバージョンアップした時に影響を確認したいと思っています。 確認方法としてPHPからOracle、MySQLへの接続部分の仕様変更箇所を把握し、現行のコードで問題なし/ありを確認していきたいと考えています。 例えばODP.netの場合は以下の情報が公開されており12cにてサポート外となったクラスや列挙体が記載されています。 https://docs.oracle.com/cd/E90668_01/ODPNT/intro003.htm#GUID-7CD88566-0561-4121-937D-57A190CDE2EA__BABHAEGJ PHPでもOracle、MySQLへ接続するライブラリが分かれば上記のような情報が見つかるのでは?と期待をしています。 私自身、PHPについて知識がほぼ無いため、そもそも上記のような確認方法はナンセンスなのか、否かなのかも分かっていない状態ではあります。 maisumakun さんには数多くの質問に対し、真摯にお答えいただき大変ありがたく思っています。 これ以上の追求が厳しい場合は、maisumakun さんの回答をベストアンサーとさせていただき、当質問をクローズしたいと思います。
maisumakun

2020/02/03 06:36

> PHPでもOracle、MySQLへ接続するライブラリが分かれば上記のような情報が見つかるのでは?と期待をしています。 PDO_MYSQLやOCI8、です。
PII-Common

2020/02/03 06:47

maisumakun さん ご回答ありがとうございます。 すみません、もしかしたら私の認識が誤っているかもしれないので、確認させてください。 PDO_MYSQLやOCI8はPHPインストール時に入るライブラリだと認識しているのですが、間違いないでしょうか?
maisumakun

2020/02/03 06:48

> PDO_MYSQLやOCI8はPHPインストール時に入るライブラリだと認識しているのですが、間違いないでしょうか? はい。ただし、これらを動作させるには別途でDBベンダー側のライブラリが必要です。 (なんだか、同じところを堂々巡りしている気がしてきた…)
PII-Common

2020/02/03 07:10

maisumakun さん > (なんだか、同じところを堂々巡りしている気がしてきた…) 泥沼化してしまい、申し訳ございません。 > はい。ただし、これらを動作させるには別途でDBベンダー側のライブラリが必要です。 DBベンダー側のライブラリとは具体的に何かご存知でしょうか?
maisumakun

2020/02/03 07:12

> DBベンダー側のライブラリとは具体的に何かご存知でしょうか? MySQLについては、libmysqlclient(MySQL Connector/C )です。
PII-Common

2020/02/03 07:20

maisumakun さん ご回答ありがとうございます。 > MySQLについては、libmysqlclient(MySQL Connector/C )です。 情報ありがとうございます。 libmysqlclientについて、仕様を確認してみます。 Oralceに関しては環境を使われたことが無いとのことで、不明ということで間違いないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問