以前はPHPからデータベースに接続しようとするとMySQLであれば「mysql_connect」関数、PostgreSQLであれば「pg_connect」関数などと接続するデータベースに合わせて使用する関数を使い分ける必要がありました。 © Copyright 2020 ねこの足跡R. All rights reserved. PHPのPDOクラスとは. ※この記事は専門学校の講義用に作成されたものです前回に引き続きPHPからMySQLを操作します。今回のテーマは「トランザクション」への対応です。トランザクションをマスターすれば、2つ以上のSQLを実行した際にいずれかの実行が失敗した場合でも、そのすべてを無かっ... [PHP] アクセスカウンター用のRESTfulAPIを作成する – その2 DB版, [PHP] アクセスカウンター用のRESTfulAPIを作成する – その1 ファイル版, [Redmine] EasyGanttで日本の祝日表示に対応する – 2020〜2021年版, [AWS] LightsailでEMLauncherを動かす – AmazonLinux2編, [Electron] Webの技術だけでWindowsやmacOS用のアプリを作成する, SSHで接続できない「Can’t assign requested address」エラーが発生した場合. PDOを使ったデータベースへの接続方法をMySQL、MariaDB、SQLite、PostgreSQLの4種類のデータベースを使って解説します。 (正しく更新できたかを確認するには、更新後のデータをSELECTする必要があります), 今回はMySQLを例に紹介しましたが、PDOを使用すれば簡単にデータベースに接続することができます。, Webアプリを作成するためには必須の技術なので、しっかりと身につけておきましょう。, 【PC1台で稼ぐブロガー兼Webエンジニアを目指し中】IT情報やWebサービス、アプリなどの情報を発信/SIerで10年以上勤務→ストレスMAXで休職中→ブログとWebの学習を行い脱サラ計画中/ #30DAYSトライアル 1st完了→2nd実施中 / 日々の学習内容をブログにアウトプット / まずは月収5万円を目指す, 'mysql:host=localhost;dbname=mydb;charset=utf8', '【SQLが可変(WHEHE句等にユーザー入力値が入る等)の場合:可変部分を「?」とする場合】', 'SELECT * FROM memos WHERE id = :id OR memo = :memo', '【SQLが可変(WHEHE句等にユーザー入力値が入る等)の場合:可変部分を「:キー値」とする場合】', // DSN:データソース名(Data Source Name)。データベースに接続するための情報, // MySQLの場合:mysql:host=ホスト名;dbname=データベース名;charset=文字コード, prepareメソッドで返ってきたPDOステートメントのexecuteメソッドに「?」部分の値を配列で指定する, prepareメソッドで返ってきたPDOステートメントのbindValueメソッドでキー値に対応する値をセットする. PHPで用意されているネイティブ関数をPHPスクリプトでラッピングしてたPEAR::DBなどと違いPDOは「 PHP Extension(PHP拡張) 」なので、動作速度がそれほど問題にならないところです。 大量のデータを扱う場合などはやはりこの「処理速度」というのは重要になってきます。 では実際に試してみます。下記ではデータベースへ接続後にテーブルの中身を表示させています(詳しくは別のページで確認します)。 pdotest2.php 第4引数を省略する場合は、第2引数と第3引数も省略可能です。 PDOのエラーは明確に明示しなければなりません。 PDO::ERRMODE_EXCEPTIONで、接続時以外のエラーもtry catchでcatchします。 参考ページ PHP: エラーおよびエラー処理 – Manual. [PHP] MySQLをPDOで操作する – 入門編 その2 「トランザクション」. PDOの利点. テーブル作成 $ php get.php 1, 1, 1, 3000 2, 20, 23456, 80000 3, 99, 99999999, 120000 データを挿入する – その1「疑問符プレースホルダ」 データの挿入、更新、削除はほぼ同じコードで実現できます。以下のコードを「insert.php」として適当な場所に保存します。 サンプル. phpでpdoを使ってmysqlに接続する方法! 当記事は以下の環境にて検証しています。 mac os x 10.12.4; php 7.1.16; mysql 5.7.21 (データベース接続のSQL発行や結果の取得もデータベースごとに関数が設けられていました), そのため、使用するデータベースが変更となると影響範囲がものすごいことになるという弱点がありました。, しかし、PDOクラスが登場したことにより「データベースが異なる場合でも同じ関数を使用することができる」ためデータベースの変更にも耐えれるようになりました。, データベースの内容をPHPのオブジェクトのように扱えるようになるクラスになります。, いきなりですが、PHPのPDOクラスでMySQLに接続するサンプルコードを下記します。, とりあえず上記のデータベースを作成し、コードを実行したらデータベースに接続し、データをSELECTする3パターンの結果が見れます。, 注意点としてはデータベース接続時に例外が発生する可能性があるので、tyr、catchで囲む必要があるということですね。, SQLが固定(ユーザー入力などによってSQLの内容が変わらない)場合はサンプルコードの以下の部分がSQL発行にあたります。, 返り値はPDOStatmentと呼ばれるオブジェクトで、SQLの結果などが格納されています。, SQLが可変(ユーザー入力などによってSQLの内容が変わる)場合は2パターンの方法があります。, SQLが可変の場合の2パターン目はSQLの可変部分を「:キー値」で指定する場合です。, SQL発行(query、executeメソッド)を実行した後は、PDOステートメントのfetchメソッドを使用してデータを1行ずつ取得していきます。, サンプルコードの「PDO::FETCH_ASSOC」はカラム名がキー値となる連想配列で返ってきます。, 以下のQiita記事に色々とまとまっているので、そちらを参照すると分かりやすいかと思います。 PDOとは「PHP Data Objects」の頭文字をとった名称です。 データベースの内容をPHPのオブジェクトのように扱えるようになるクラスになります。 PHPのPDOクラスでMySQLに接続するサンプルコード データベースとのやり取りには様々な罠が待ち構えており、ちょっと書き損じた(設定を忘れた)だけでサービスが崩壊することもよくあります。誇張ではなく日常的に発生しており、例えばゲームやWebサービスがローンチしたとき、またはメンテナンスが開けたとき、サーバにまともにつながらずTwitterなどで話題になっているのを目にしますよね。またデータベースは個人情報はもとより、お金にまつわるデータも取り扱いますのでセキュリティにも気をかける必要がありますが、下手をすると漏洩や改ざんの温床になりかねません。, 人類にデータベースは早すぎるのかもしれないと私もよく感じていますが、しかしながらこれらの事故の大半は「うっかりミス」だったりもします。情報をアップデートし続ける必要はありますが、基本や定石に忠実に従っていればトラブルを未然に防ぐことも可能です。このシリーズではそんな定石についてもおいおい取り上げていきたいと思います。, PHP側のコードを書き始める前にデータベース側を準備しておきます。ここではMySQLのインストールや初期設定は完了している前提でお話します。, 今回は例としてソーシャルゲーム用のデータベースと、ユーザー情報を格納するテーブルを作成することにします。テーブル定義は以下。これを「sgrpg.sql」という名前で保存しておきます。, MySQLのクライアント経由で先ほどのSQLを実行します。ここではMySQLにログインするためのユーザーIDはsenpaiとしています。エラーメッセージなどが表示されなければ正常に終了しています。, ではMySQLにログインし本当に作成が成功しているか確認します。show databasesでデータベースの一覧を表示することができます。, テーブルも作成が成功したか確認しておきましょう。use (データベース名)でこれから利用するデータベースを指定、desc (テーブル名)でテーブル構造を表示します。, 今回はデータを取り出して表示するところまでを取り上げますが、現状テーブルは空っぽなので最初のデータを人力で入れてあげます。User.idはAUTO_INCREMENTにしているので指定しません。, お待たせしました。ここからようやくメインディッシュですw ここでは適当な場所に「get.php」という名前で保存し、Terminalなどから以下のPHPを実行します。, データの挿入、更新、削除はほぼ同じコードで実現できます。以下のコードを「insert.php」として適当な場所に保存します。, こちらも同様にTerminalなどで実行した後に、MySQL上にデータが新しく追加されたか確認します。, データの挿入、更新、削除は別の書き方もできます。以下のコードを「insert2.php」として適当な場所に保存します。, サンプルでは整数型を示すPDO::PARAM_INTを利用しましたが、これ以外にも次のような定数が用意されています。, サーバは生き物みたいなもので、いつ正常に動かなくなるか分かりません。ただデータベースに問い合わせる度に毎回戻り値をチェックするのは正直面倒です。そこで実行時エラーが発生したら例外を投げ、try〜catchで補足することができます。, PDOのインスタンス作成後に$dbh->setAttribute()でエラーモードを変更するだけです。, 最後に応用です。せっかくPHPで書いたものですのでJavaScriptから取得できるようにAPI化します。以下のソースコードをWebサーバから見える場所(ドキュメントルート)に保存します。, 実行時エラーのときの挙動も確認しておきましょう。ここではMySQLへログインする際のユーザーIDを存在しないものに変更しました。, ブラウザからアクセスすると、意図した挙動をするでしょうか?再読み込みをする度にresultで返される数値が上がっていきます。, お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。, このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。.
31歳 Ȋ能人 Âャニーズ 8, Ãイク Âート Áつれ ȣ修 7, Ļ面ライダー Ɏ ƭ Áとめ 19, Ãイクラ ư抜き Ãケツ 44, Ãイクラ ʼn哨基地 ƹき潰し 8, Ãアルック Tシャツ Ȧ子 4, Ãヴォーグ Ãア Ãラレコ Ʌ線 4, ɳ ŷ Ɣ棄 12, Ãィビジョン2 Âニーアイランド ɚÁネームÃ 8,
