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

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

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

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

PHP

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

Q&A

6回答

8050閲覧

mysqliとPDOの違い

avantgarden

総合スコア121

MySQL

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

PHP

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

0グッド

3クリップ

投稿2016/03/21 10:06

編集2022/01/12 10:55

タイトルの通りなのですが、mysqliとPDOは何が違うのでしょうか。

それぞれのメリット・デメリットを含め教えて欲しいです。

ちなみに、オブジェクト指向についてはほとんどわかりません。
経験はなく、クラスとかインスタンスとか、なんとなく知っている程度です。

大雑把な質問だと思いますが、よろしくお願いします。

<追記>

すみません。最初から書けばよかったのですが、
私の場合はMySQLを使っているので、OracleやMongoDBなど他のデータベースは使用しないという前提でお願いします。

<追記1>

今のところ明確なご回答が得られておりませんので、回答いただいた方には申し訳ないですがベストアンサーは保留とさせていただきます。

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

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

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

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

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

guest

回答6

0

まず、下記のURLを先に参照してください。

いろんなデータベース別の専用の拡張モジュールが一つになったのがPDOというでしょうか

PDOを使うメリットといえば、
開発中または開発終了後、データベースを変えようとなった場合をご自分で考えてみましょう。へへ

投稿2016/03/21 10:42

JinwonKim

総合スコア312

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

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

avantgarden

2016/03/21 11:18

ご回答ありがとうございます。 なるほど、PDOはデータベースを問わず使えるということですね。 MySQLの枠内ではどうでしょうか。 どちらを使った方が良いとかあるのでしょうか??
guest

0

以下に、両者(と、"mysql"API)の機能比較が載っています。
http://php.net/manual/ja/mysqlinfo.api.choosing.php

また、以下のページが、上の表をわかりやすく説明してくれていると思います。
http://pgmy.github.io/blog/2014/04/04/php-mysql-api/

投稿2016/03/21 11:43

KiyoshiMotoki

総合スコア4791

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

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

avantgarden

2016/03/22 13:14 編集

ありがとうございます。 なんかそれほど大きくは変わらない印象ですね。。 あまり気にしなくていいんですかね?? 大規模な開発ではオブジェクト指向が必須とよく聞くので、PDOも覚えないといけないのかなと思ったら、mysqliもオブジェクト指向の書き方があるのですね。
KiyoshiMotoki

2016/03/22 16:47

私自身が比較検証したわけではないので確かなことは言えませんが、、 一般的なアプリケーションを作る限りは、どちらを使うかは好みで選んでしまってもよいのかな?と思います。 一点、注意したほうがよさそうなのが  MySQL 5.1+ の全機能への対応 という項ですね。 PDOは"MOST"となっているので、MySQLで5.1以降に追加された機能の中には、 PDOからは使用できないものがあるようです。
avantgarden

2016/03/23 01:56

すみません、もう1点だけ。 そもそも"MOST"とはどういう意味でしょうか?
KiyoshiMotoki

2016/03/23 02:38

「ほとんど」とか「大抵は」とかいったニュアンスだと思います。
avantgarden

2016/03/23 02:45

ありがとうございます!
KiyoshiMotoki

2016/03/23 03:02 編集

> 「ほとんど」とか「大抵は」とかいったニュアンスだと思います。 思い込みでしゃべるのも何だと思ったので あらためて調べてみたところ、 "複数ステートメント"について、以下の記事を見つけました。 http://stackoverflow.com/questions/6346674/pdo-support-for-multiple-queries-pdo-mysql-pdo-mysqlnd 要するに、以下の条件を満たす場合のみ、PDOで複数ステートメントを使用できるようです。 ・PHP 5.3以上 ・mysqlndを使う("now ND is default driver for MySQL+PDO."なので、気にしなくてよさそう) ・PDO::ATTR_EMULATE_PREPARES に1をセットする。  または  PDO::ATTR_EMULATE_PREPARES に0をセットし、$db->exec を使用する。 "MySQL 5.1+ の全機能への対応"については、詳細な情報は見つけられませんでした。
guest

0

三年も前なので今更ですが、
PDOとMysqliの比較で言えば、下記URLが参考になるかと思います。
https://qiita.com/mpyw/items/b00b72c5c95aac573b71
記事後半部分に比較している項目があります。
大きな違いは
mysqli
・メリット・・・より高速に処理が可能であること、マルチクエリが使用出来る
・デメリット・・・名前付きプレースフォルダが使用できない、DBの変更には対応できない。

PDO
・メリット・・・DBが変更されても問題無い。名前付きプレースホルダが使える。
・デメリット・・・マルチクエリができない、プリペアドステートメントで型を指定しながら複数のバインドが同時にできない

などでしょうか。
詳しくは記事を見ていただいた方がいいかと思います。

パフォーマンスを相当意識するのであればMysqliもありなのかなと思いますが、
他の皆様もおっしゃっているようにDBが変更された場合はとんでもない修正コストが発生します。
ただ、実際のところDB変更を行うことってそうそうないとも思うので、要件次第でしょうか。

投稿2019/10/16 07:08

編集2019/10/16 07:16
annderber

総合スコア98

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

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

0

PDOを使っていくのがよろしかろうと存じます。

投稿2016/03/23 02:11

KonbanWatanabe

総合スコア13

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

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

avantgarden

2016/03/23 02:44

私も何となくそんな気はしてるのですが、明確な理由がわからず質問しています。 どのような理由からなのか教えていただけると嬉しいです。
guest

0

mysqli=拡張モジュール(標準で入ってなくて、入れたら便利になるやつ)と
pdo=抽象化モジュール(標準で入ってて、便利なやつ)では、比べる土俵が違うかもですが。

ざっくり、pdoのメリットは、よりセキュアになってて、向こう1、2年の間に非サポートにあはならないだろうという安心感があること。
mysqliは、、自分も知りたい、誰か教えて下さい(笑)

投稿2016/03/21 10:18

takaki.ishibash

総合スコア120

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

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

avantgarden

2016/03/21 11:19

ご回答ありがとうございます。 拡張モジュールと抽象化モジュールの違いがよく分かりません。。。
guest

0

ざっくりいうと、

PDO = 汎用のデータベース操作用ライブラリ。設定を変更するだけで別の RDBMS でも動く(ただし当然ながら、SQL の方言などは吸収してはくれません)

mysqli = MySQL 専用の操作用ライブラリ。MySQL がもともと用意しているライブラリを直接使用して操作しているので、速度は速くなる。反面、他の RDBMS に変更する際には全面書き直しが必要。

mysqli でないとできないこととしては、ノンブロッキング非同期クエリがあるくらいですか。
逆に mysqli だと、SQL のプレースホルダが ? しか使えません。

どちらがよいかというなら、PDO を使った方がよいかと思います。
プレースホルダが ? しか使えないと、順番を意識しなくてはならなくて面倒ですしバグる確率上げてしまいますから。
※DB の引っ越し(別 RDBMS への移植)については、あまり考える必要はないかと思います

投稿2019/10/16 08:19

tacsheaven

総合スコア13703

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問