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

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

ただいまの
回答率

88.06%

mysqliとPDOの違い

受付中

回答 6

投稿 編集

  • 評価
  • クリップ 3
  • VIEW 6,235

score 81

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

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

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

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

<追記>

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

<追記1>

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

+4

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/21 19:44

    キャンセル

  • 2016/03/21 20:18

    ご回答ありがとうございます。
    なるほど、PDOはデータベースを問わず使えるということですね。

    MySQLの枠内ではどうでしょうか。
    どちらを使った方が良いとかあるのでしょうか??

    キャンセル

+3

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/23 11:38

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

    キャンセル

  • 2016/03/23 11:45

    ありがとうございます!

    キャンセル

  • 2016/03/23 12:01 編集

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

    思い込みでしゃべるのも何だと思ったので
    あらためて調べてみたところ、
    "複数ステートメント"について、以下の記事を見つけました。

    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+ の全機能への対応"については、詳細な情報は見つけられませんでした。

    キャンセル

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/21 20:19

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

    キャンセル

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/23 11:44

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

    キャンセル

+1

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

ざっくりいうと、

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る