これはpdoの設定pdo::attr_errmodeにpdo::errmode_exceptioを設定しています。 詳しいくことはphpマニュアルに載っています。 pdo::attr_errmode: エラーレポート; pdo::errmode_exception: 例外 を投げる; 引用元:phpマニュアル - pdo::setattribute. phpでpdoを使ってmysqlに接続する方法! 当記事は以下の環境にて検証しています。 mac os x 10.12.4; php 7.1.16; mysql 5.7.21 基本の4つのsql文 PDOの利点. PHPで用意されているネイティブ関数をPHPスクリプトでラッピングしてたPEAR::DBなどと違いPDOは「 PHP Extension(PHP拡張) 」なので、動作速度がそれほど問題にならないところです。 大量のデータを扱う場合などはやはりこの「処理速度」というのは重要になってきます。 PHPのPDOクラスとは. (正しく更新できたかを確認するには、更新後のデータを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メソッドでキー値に対応する値をセットする. データベースとのやり取りには様々な罠が待ち構えており、ちょっと書き損じた(設定を忘れた)だけでサービスが崩壊することもよくあります。誇張ではなく日常的に発生しており、例えばゲームや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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。. サンプル. 第4引数を省略する場合は、第2引数と第3引数も省略可能です。 PDOのエラーは明確に明示しなければなりません。 PDO::ERRMODE_EXCEPTIONで、接続時以外のエラーもtry catchでcatchします。 参考ページ PHP: エラーおよびエラー処理 – Manual. ※この記事は専門学校の講義用に作成されたものです前回に引き続き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」エラーが発生した場合. 以前はPHPからデータベースに接続しようとするとMySQLであれば「mysql_connect」関数、PostgreSQLであれば「pg_connect」関数などと接続するデータベースに合わせて使用する関数を使い分ける必要がありました。 では実際に試してみます。下記ではデータベースへ接続後にテーブルの中身を表示させています(詳しくは別のページで確認します)。 pdotest2.php All rights reserved. $ php get.php 1, 1, 1, 3000 2, 20, 23456, 80000 3, 99, 99999999, 120000 データを挿入する – その1「疑問符プレースホルダ」 データの挿入、更新、削除はほぼ同じコードで実現できます。以下のコードを「insert.php」として適当な場所に保存します。 PDOとは「PHP Data Objects」の頭文字をとった名称です。 データベースの内容をPHPのオブジェクトのように扱えるようになるクラスになります。 PHPのPDOクラスでMySQLに接続するサンプルコード [PHP] MySQLをPDOで操作する – 入門編 その2 「トランザクション」. テーブル作成 (データベース接続の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を使ったデータベースへの接続方法をMySQL、MariaDB、SQLite、PostgreSQLの4種類のデータベースを使って解説します。 © Copyright 2020 ねこの足跡R. PDOを使ったデータベースへの接続方法をMySQL、MariaDB、SQLite、PostgreSQLの4種類のデータベースを使って解説します。, 今回はMySQL、MariaDB、SQLite、PostgreSQLの4種類のデータベースを使って、実際に接続&解除する方法を解説します。, 3種類のデータベースには全て「test」というデータベースがあり、その中にtestテーブルがあることを前提とします。それでは、それぞれのデータベースごとに1つずつ確認していきましょう。, PDOの基本的なご紹介は「PDOについて」を、ご利用の環境でPDOが利用できるデータベースを知りたい場合は「PDOで使用できるデータベースを調べる」をご覧ください。, まずはMySQLとMariaDBから、PDOを使った接続と解除を行っていきます。この2つのデータベースはどちらも「mysql」として接続することができます。, PDOのデータベース接続はコンストラクタで提供されており、インスタンスを生成する際にデータベースの情報を渡して接続します。, MySQL(またはMariaDB)データベースを使用する場合は、インスタンスを生成する際に「接続情報」「ユーザー名(username)」「パスワード(password)」の3つの引数を渡します。1つ目の引数では次の4つの情報を指定しています。, これらの値を渡して接続に成功すると、PDOオブジェクトが返されます。このオブジェクトを使って、クエリを実行したりするメソッドを呼び出すことになります。, (1)と(2)をtry文で囲っているのは接続エラー対策です。PDOでは接続に失敗した場合、「PDOException」というエラー(例外)を投げます。それをcatch文で受け取り、getMessageメソッドでエラーメッセージを取得することで、どんなエラーが起きたかが分かるようになっています。, データベースに接続できなかった場合は以降の処理も実行できない場合が多いため、多くの場合はdie関数を使用して処理自体を終了することが多いです。, 続いて、PostgreSQLデータベースへ接続してみましょう。基本的な流れはMySQLと同じですが、オレンジ色になっているPDOのインスタンスを作成する部分だけが修正点となります。, 「// DBへ接続」の箇所で、指定しているデータベースのドライバーがPostgreSQLの「pgsql」を指定しています。あとは文字コードの指定以外同じです。, 最後にSQLiteデータベースへ接続していきます。ここでもやはり基本的な流れは上記2つと同じになり、PDOのインスタンスを作成する箇所のみ異なります。, SQLiteはファイルベースのため、「// DBへ接続」の第1引数でドライバーを「sqlite」と指定した後にデータベースファイルのパスを渡します。ユーザー名、パスワードは不要です。, もしPDOがデータベース接続に失敗したらどうなるでしょうか。先ほど、接続に失敗すると「PDOExceptionというエラー(例外)を投げる」と書きましたが、実際にそのエラーメッセージを確認してみましょう。, 実行環境にドライバーの無い「Oracle database」へ接続しようとすると、下記のメッセージが表示されました。, エラー内容によってメッセージ内容は異なりますが、このようにメッセージを出力して確認することで原因を特定したり、処理を分岐させることができます。もしうまくデータベースに接続できていないようだったり、SQLなどの処理がうまくいかないことがありましたら、エラーメッセージを積極的に確認してみてください。, 今回解説した内容についてのphp.netのページはこちらPDO::__construct – php.net, ありがとうございます。もしよろしければ、あわせてフィードバックや要望などをご入力ください。, 作業中はほぼ必ずコーヒーを飲みながらなのですが、スタバのコーヒー豆を一周したところで出会ったのがこのキャラバンコーヒー。「パッケージ綺麗だなあ」ぐらいの軽い気持ちでポチったところ、これがなかなか美味しいのです。コーヒー好きな方はぜひ一度お試しを。値段はAmazonの方が安いですが、豆を挽いた粉タイプをお求めの場合はAmazonだと無さそうなので公式サイトがおすすめです。, 浮動小数点数の四捨五入(round関数) / 切り上げ(ceil関数) / 切り捨て(floor関数), メールの送信元が文字化けした時の対処方法:mb_encode_mimeheader関数, mysqliでMySQL/MariaDBにテーブルを作成:CREATE TABLE, PDOからMySQL / MariaDB / SQLite / PostgreSQLへの接続方法を確認する. PDOフェッチパターン大全, これはSELECTする場合と同じで、データがSQLが固定であればqueryメソッド、可変であればprepareメソッドを使用して発行すればOKです。, SELECTとの違いはSQL発行した後のfetch(データ取得)が不要というだけです。