ホームページ  >  記事  >  バックエンド開発  >  PHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル

PHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:26:54959ブラウズ

少し前に、PHP について調べ始めて、PDO に関する情報を読んで、将来使用するために開発ノートとして整理してまとめました。「PHP 開発ノート シリーズ (1) - PDO の使用」。

PDO は PHP Data Objects の略称で、データベースアクセス抽象化レイヤーです。 PDO は、さまざまなデータベースに対する一貫したインターフェイスです。類推すると、PDO の機能は JAVA の永続層フレームワーク (Hibernate、OpenJPA) の機能に似ており、異種データベースに統合されたプログラミング インターフェイスを提供するため、mysql_* や pg_* などの関数を使用する必要はありません。独自の「GenericDAO」を作成する必要はもうありません。 PDO は PHP5.1 でリリースされたため、私たちが使用する PHP5.2 と PHP5.3 はすでに利用可能です。

便宜上、デモには MySQL5 を使用します。

0. 実験環境データベースと関連テーブルを確立します

SQLコードPHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル
  1. テーブル「ブログ」を作成 (
  2. )
  3. `id` int(10) NOT NULL AUTO_INCREMENT、
  4. `タイトル` varchar(255) NOT NULL、
  5. プライマリ キー (`id`)
  6. ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1



1. PDO を使用してデータベースにアクセスします
PDO を介してデータベースにアクセスする手順は次のとおりです: a) DSN、ユーザー名、パスワードを指定します。b) #a の設定を通じて PDO オブジェクトを構築します。コードは次のとおりです。 :

PHPコードPHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル
  1. ファイル:pdo-access.php
  2. url:http://localhost:88/pdo/pdo-access.php
  3. //DSN、ユーザー名、パスワードを設定します
  4. $dsn = 'mysql:host=localhost;dbname=pdotest'; $ユーザー名 =
  5. 'root';
  6. $passwd = 'パスワード';
  7. //PDO オブジェクトを構築する 試してください {
  8. } catch (例外
  9. $e) {
  10. エコー f'データベースに接続できません!
  11. ️と } ?> 注: DSN はデータ ソース名 - データ ソース名で、データベース接続情報を提供し、PDO ドライバー名 (MySQL、SQLite、PostgreSQL など)、コロン、およびドライバー固有の構文の 3 つの部分が含まれます。しかし、通常の状況では、これらを覚えるのは困難です。php マニュアルをダウンロードして確認することも、php の公式 Web サイトで確認することもできます。
  12. 2. Query メソッドを使用してデータをクエリします #1 に基づいて、データベースに正常に接続した後、SQL ステートメントを構築し、クエリ メソッドを呼び出して構造体配列を返し、foreach を介してデータ結果を走査します。コードは次のとおりです: PHPコードPHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル
    1. ファイル:pdo-query.php
    2. url:http://localhost:88/pdo/pdo-query.php?title=title1
    3. $dsn = 'mysql:host=localhost;dbname=pdotest'; $ユーザー名 =
    4. 'root';
    5. $passwd = 'パスワード';
    6. 試してください {
    7. $title =
    8. 'title1'; 造构 // SQL ステートメントを構築します
    9. L q $ sql =
    10. "select*from blog where title = '" . $ table. "'"; // クエリを実行し、結果を走査します 印刷する 印刷する } } catch (PDOException
    11. $e) {
    12. データをクエリするとエラーが発生します! ️と }
    13. ?>
    14. 注釈: 通常の状況では、クエリ、更新、挿入、および削除を実行する SQL ステートメントを構築することにより、where 条件を指定する必要があるため、SQL インジェクションの問題を防ぐことは避けられません。
    15. たとえば、通常の状況では、ユーザーが「title1」と入力すると、構築する SQL ステートメントは SELECT * FROM blog WHERE title='title1' になりますが、SQL に精通しているユーザーは「OR id LIKE 」と入力します。 % 、この時点で構築する SQL は SELECT * FROM blog where title='' OR id LIKE '%' となり、ブログ テーブル全体のデータが読み取られるため、これを避ける必要があるため、引用符はSQL インジェクションが発生しないようにするには、ユーザーが提供したすべてのデータを転送する必要があります。 quoteメソッド使用後のSQLは$sql = "SELECT * FROM blog WHERE title = ".$dbh->quote($title)、転送後のSQLはSELECT * FROM blog WHERE title = ''OR id LIKE ' %'、すべての一重引用符 (') が転送されます。
    16. 3. 準備メソッドと実行メソッドを使用してデータをクエリする 使用する SQL クエリが頻繁に使用されないクエリである場合、クエリまたは準備メソッドと実行メソッドを使用することに大きな違いはなく、クエリの速度は向上します。遠すぎないでください。 2 つの違いは、クエリを使用する場合、php によってデータベースに送信される SQL を実行するたびにコンパイルする必要があることですが、prepare メソッドとexecute メソッドを使用する場合はその必要がないため、大規模な同時実行操作を実行する場合は、準備メソッドと実行メソッドを使用すると、利点がより明らかになります。 prepare メソッドとexecute メソッドを使用するには、a) SQL を構築する、b) SQL を PDO->prepart メソッドに渡して PDOStatement オブジェクトを取得する、3) PDOStatement オブジェクトの実行メソッドを呼び出す、4 という手順はそれほど多くありません。 ) PDOStatement->fetch または PDOStatement->fetchObject を渡して、結果セットを走査します。コードは次のとおりです:

      PHPコードPHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル
      1. ファイル:pdo-prepare-fetch.php
      2. url:http://localhost:88/pdo/pdo-prepare-fetch.php?title=title1
      3. $dsn = 'mysql:host=localhost;dbname=pdotest'; $ユーザー名 =
      4. 'root';
      5. $passwd = 'パスワード';
      6. //リクエストからタイトルパラメータ値を取得します $title =
      7. $_GET[
      8. 'タイトル'];
      9. 試してください {
      10. 造 构 // SQL ステートメントを構築し、バインディング変数を使用します L q $ sql =
      11. b b b
      12. =: タイトル "; // SQL をコンパイルする ️ //バインド変数に値を代入します ️ $stmt->bindParam(":title",
      13. $title, PDO::PARAM_STR);
      14. //SQLを実行 合联 // 配列の組み合わせで結果を取得し、その結果を走査します
      15. 印刷する 印刷する
      16. }
      17. } catch (PDOException $e) {
      18. データをクエリするとエラーが発生します ️と }
      19. ?>
      20. 上記の PDO::FETCH_ASSOC を使用して連想配列を返すことに加えて、 fetchObject メソッドを使用して結果セット オブジェクトを返すこともできます。 コードは次のとおりです。Php代コード PHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル
        1. ファイル:pdo-prepare-fetch-object.php
        2. url:http://localhost:88/pdo/pdo-prepare-fetch-object.php?title=title1
        3. $dsn = 'mysql:host=localhost;dbname=pdotest';  
        4. $ユーザー名 = 'root';  
        5. $passwd = 'パスワード';  
        6. $title = $_GET['title'];  
        7. 試してみる {
        8. $dbh = 新しい PDO($dsn, $username, $passwd);  
        9. echo 'データベースに正常に接続しました!'."
          ";  
        10. $sql = "SELECT * FROM ブログ WHERE title = :title";  
        11. $stmt = $dbh->prepare($sql);  
        12. $stmt->bindParam(":title", $title, PDO::PARAM_STR);  
        13. $stmt->execute();  
        14. // 以对象数组方式获取结果,并遍历结果
        15. while ($row = $stmt->fetchObject()) {
        16. print $row->id."t";  
        17. print $row->title."t";  
        18. }
        19. } キャッチ (例外 $e) {
        20. echo 'データをクエリするとエラーが発生します!n';  
        21. echo $e->getMessage();  
        22. }
        23. ?>  



        4. PDO のセキュリティ クラスを設定します。
        PDO のセキュリティ クラスは、PDO::ERRMODE_SILENT(セキュリティ)、PDO::ERRORMODE_WARNING、PDO::ERRORMODE_EXCEPTION の 3 つに分けられます。
        PDO::ERRMODE_SILENT クラスまた、エラーが発生すると、PDOStatement オブジェクトが自動的に設定されます。 errorCode プロパティはありますが、他の操作は実行されないため、手動でエラーが発生したかどうか (empty($stmt->errorCode()) を使用)、プログラムが継続的に実行されるかどうかをチェックする必要があります。 ::ERRMODE_SILENT に一致し、すべてはempty($stmt->errorCode()) を使用して手動で検査する必要があります。 PDO::ERRMODE_SILENT);または$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
        PDO::ERRORMODE_WARNING 级别,当出错误時,システムは PDOException を出します,errorCode プロパティを設定します,プログラムは try{...}catch{...} を介してキャプチャを実行できますが,キャッチされない場合は例外会导結果プログラム中断、すぐに次のコードを追加します:$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 


        PHPコードPHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル

        1. 試してください {
        2. } catch (例外
        3. $e) {
        4. oEcho er'errs 操作時に発生します! '。
        5. ️ 错取 // エラーコードを取得します ️ 出取 // ファイル名が間違っています 出取 // 行を間違えます
        6. // 例外を文字列として返します ~ }
        7. ?> 5. 準備メソッドと実行メソッドを使用してデータを挿入/更新します
        8. このメソッドは、構築された SQL ステートメントが挿入ステートメントまたは更新ステートメントであることを除いて、#3 のクエリと似ています。コードは次のとおりです。 Php代コード PHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル
          1. ファイル:pdo-prepare-insert.php
          2. url:http://localhost:88/pdo/pdo-insert.php?title=title11
          3. $dsn = 'mysql:host=localhost;dbname=pdotest';  
          4. $ユーザー名 = 'root';  
          5. $passwd = 'パスワード';  
          6. $title = $_GET['title'];  
          7. 試してみる {
          8. $dbh = 新しい PDO($dsn, $username, $passwd);  
          9. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
          10. echo 'データベースに正常に接続しました!'."
            ";  
          11. // 构造语句を挿入
          12. $sql = "INSERT INTO blog(title) VALUES(:title)";  
          13. $stmt = $dbh->prepare($sql);  
          14. $stmt->bindParam(":title", $title);  
          15. $stmt->execute();  
          16. } キャッチ (例外 $e) {
          17. echo 'データをクエリするとエラーが発生します!n';  
          18. echo $e->getMessage();  
          19. }
          20. ?>  



          Php代コード PHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル
          1. ファイル:pdo-prepare-update.php
          2. url:http://localhost:88/pdo/pdo-update.php?id=1&title=title12
          3. $dsn = 'mysql:host=localhost;dbname=pdotest';  
          4. $ユーザー名 = 'root';  
          5. $passwd = 'パスワード';  
          6. $id = $_GET['id'];  
          7. $title = $_GET['title'];  
          8. 試してみる {
          9. $dbh = 新しい PDO($dsn, $username, $passwd);  
          10. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
          11. echo 'データベースに正常に接続しました!'."
            ";  
          12. // 构造更新语句
          13. $sql = "UPDATE blog SET title=:title where id=:id";  
          14. $stmt = $dbh->prepare($sql);  
          15. $stmt->bindParam(":id", $id);  
          16. $stmt->bindParam(":title", $title);  
          17. $stmt->execute();  
          18. } キャッチ (例外 $e) {
          19. echo 'データをクエリするとエラーが発生します!n';  
          20. echo $e->getMessage();  
          21. }
          22. ?>  



          6. 返された行数
          #3 の準備および実行メソッドを使用し、その後 SQL 句のカウントを変更します (例: SELECT COUNT(id) FROM Article ...,代码如下:

          )Php代コード PHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル
          1. ファイル:pdo-prepare-fetch-column.php
          2. url:http://localhost:88/pdo/pdo-prepare-fetch-column.php?id=1&title=title12
          3. $dsn = 'mysql:host=localhost;dbname=pdotest';  
          4. $ユーザー名 = 'root';  
          5. $passwd = 'パスワード';  
          6. 試してみる {
          7. $dbh = 新しい PDO($dsn, $username, $passwd);  
          8. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);  
          9. echo 'データベースに正常に接続しました!'."
            ";  
          10. // 构造数语句
          11. $sql = "ブログからカウント(id)を選択";  
          12. $stmt = $dbh->prepare($sql);  
          13. $stmt->execute();  
          14. // fetchColumn获取0列值
          15. を使用します
          16. echo $stmt->fetchColumn()." 行が返されました!";  
          17. } キャッチ (例外 $e) {
          18. echo 'データをクエリするとエラーが発生します!n';  
          19. echo $e->getMessage();  
          20. }
          21. ?>  



          7. 影響を受けた行数を取得します
          #3 の準備および実行メソッドを使用し、その後 SQL 句を変更して挿入、更新、削除します。すぐに可能です。Php代コード PHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル

          1. ファイル:pdo-prepare-row-count.php
          2. url:http://localhost:88/pdo/pdo-prepare-row-count.php?id=1
          3. $dsn = 'mysql:host=localhost;dbname=pdotest';  
          4. $ユーザー名 = 'root';  
          5. $passwd = 'パスワード';  
          6. $id = $_GET['id'];  
          7. 試してみる {
          8. $dbh = 新しい PDO($dsn, $username, $passwd);  
          9. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);  
          10. echo 'データベースに正常に接続しました!'."
            ";  
          11. $sql = "ブログから削除する WHERE id=:id";  
          12. $stmt = $dbh->prepare($sql);  
          13. $stmt->bindParam(":id", $id);  
          14. $stmt->execute();  
          15. // 获取更新、挿入、削除操作後の影響の行数
          16. echo $stmt->rowCount()." 行が影響を受けました!";  
          17. } キャッチ (例外 $e) {
          18. echo 'データ操作時にエラーが発生しました!n';  
          19. echo $e->getMessage();  
          20. }
          21. ?>  



          8. 新しい入力行の ID 値を取得します
          データベース テーブルに新しいデータを入力する場合、新しい行の ID 値を取得する必要があります。今回は PDO の lastInsertId() メソッドを使用する必要があります。Php代コード PHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル

          1. ファイル:pdo-prepare-last-insertid.php
          2. url:http://localhost:88/pdo/pdo-prepare-last-insertid.php?title=title13
          3. $dsn = 'mysql:host=localhost;dbname=pdotest';  
          4. $ユーザー名 = 'root';  
          5. $passwd = 'パスワード';  
          6. $title = $_GET['title'];  
          7. 試してみる {
          8. $dbh = 新しい PDO($dsn, $username, $passwd);  
          9. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
          10. echo 'データベースに正常に接続しました!'."
            ";  
          11. $sql = "INSERT INTO blog(title) VALUES(:title)";  
          12. $stmt = $dbh->prepare($sql);  
          13. $stmt->bindParam(":title", $title);  
          14. $stmt->execute();  
          15. // 获取上一之行の挿入语句插入的データのid值
          16. echo $dbh->lastInsertId();  
          17. } キャッチ (例外 $e) {
          18. echo 'データをクエリするとエラーが発生します!n';  
          19. echo $e->getMessage();  
          20. }
          21. ?>  



          9. PDO を使用してイベントを管理します
          プログラムの実行時に、データ ACID (可分性、一貫性、独立性、永続性) を保護するツールです。次に、PDO のトランザクションを使用してテストが実行され、複数のデータの入力が実行され、最初は正常に実行され、最初の句 SQL は入力可能で、2 番目の句 SQL は入力可能で、ロールバックかどうかが検査されます。Php代コード PHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル

          1. ファイル:pdo-prepare-transaction.php
          2. url:http://localhost:88/pdo/pdo-prepare-transaction.php
          3. $dsn = 'mysql:host=localhost;dbname=pdotest';  
          4. $ユーザー名 = 'root';  
          5. $passwd = 'パスワード';  
          6. 試してみる {
          7. $dbh = 新しい PDO($dsn, $username, $passwd);  
          8. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
          9. echo 'データベースに正常に接続しました!'."
            ";  
          10. // 开启事务
          11. $dbh->beginTransaction();  
          12. $sql = "INSERT INTO blog(title) VALUES(:title)";  
          13. $stmt = $dbh->prepare($sql);  
          14. $stmt->execute(array(':title'=>'insert title1'));  
          15. $stmt->execute(array(':title'=>NULL));  
          16. // 提交事务
          17. $dbh->commit();  
          18. } キャッチ (例外 $e) {
          19. echo 'データ操作時にエラーが発生しました!n';  
          20. echo $e->getMessage();  
          21. // 回滚事务
          22. $dbh->rollBack();  
          23. }
          24. ?>  



          10. PDO を使用してデータベース管理を実行します。システム関数を使用して、私が構築した mysqldump コマンドをすぐに渡します。PHPコードPHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル

          1. ファイル:pdo-backup.php
          2. url:http://localhost:88/pdo/pdo-backup.php
          3. $ユーザー名="ルート"
          4. $passwd="パスワード"; $dbname=
          5. "pdotest";
          6. $file='d:/'.$dbname.'.sql';
          7. //バックアップコマンドを構築します
          8. $cmd =
          9. "mysqldump -u".$username." -p".
          10. $passwd.
          11. " ".$dbname." >".$file //バックアップコマンドを実行します システム(
          12. $cmd,
          13. $エラー); if(
          14. $error){
          15. trigger_error("バックアップに失敗しました".
          16. $error);
          17. }
          18. ?>
          19. ファクトリーモードを採用:
          20. PHPコードPHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル
            1. ファイル:AbstractMySQLDump.php
            2. require_once 'MySQLDump_Win.php'
            3. abstract class AbstractMySQLDump {
            4. 抽象
            5. function __construct(
            6. $username,
            7. $passwd,
            8. $dbname, $file); // オペレーティング システムの種類に応じて、ファクトリ メソッドを使用してバックアップ クラスを構築します パブリック静的関数ファクトリー($username, $passwd,
            9. $dbname,
            10. $file) {
            11. ️ 。 ️
            12. // MySQLDump_NIX($username, $passwd, $dbname, $file) を実装します。 }
            13. } public function backup(){ system($this->cmd, $error); 断裁 // エラーの有無とエラーのロジックを判定する
            14. trigger_error("バックアップ失敗! コマンド:".$this->cmd." エラー: ".$error); } }
            15. } ?> PHPコードPHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル
              1. ファイル:MySQLDump_Win.php
              2. クラス MySQLDump_Win extends AbstractMySQLDump {
              3. //親クラスのコンストラクターメソッドをオーバーライドします
              4. パブリック
              5. function __construct($username, $passwd, $dbname, $file){ ️
              6. }
              7. } ?> PHPコード ファイル:MySQLDumpTest.php url:http://localhost:88/pdo/MySQLDumpTest.php
            16. require_once
            17. 'AbstractMySQLDump.php'



            $ユーザー名 = PHP開発ノートシリーズ(1)-PDOの使い方_PHPチュートリアル"ルート";
                $passwd =
              1. "パスワード";
              2. $dbname = "pdotest";
              3. $file =
              4. "d:/".
              5. $dbname.
              6. ".sql"; //ファクトリメソッドを使用してバックアップクラスを生成します
              7. $dump = AbstractMySQLDump::factory($username, $passwd, $dbname, $file);
              8. //バックアップ クラスのバックアップ メソッドを実行します $dump->backup();
              9. ?>
              10. http://www.bkjia.com/PHPjc/820779.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/820779.html技術記事
              11. 少し前に PHP について調べ始めて、PDO についての情報を読んで、将来使用するために開発ノートとして整理してまとめました。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。