少し前に、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コード
- テーブル「ブログ」を作成 (
)
- `id` int(10) NOT NULL AUTO_INCREMENT、
- `タイトル` varchar(255) NOT NULL、
- プライマリ キー (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1
1. PDO を使用してデータベースにアクセスします
PDO を介してデータベースにアクセスする手順は次のとおりです: a) DSN、ユーザー名、パスワードを指定します。b) #a の設定を通じて PDO オブジェクトを構築します。コードは次のとおりです。 :
PHPコード
- ファイル:pdo-access.php
- url:http:
-
-
- $dsn = 'mysql:host=localhost;dbname=pdotest';
$ユーザー名 =
'root';
- $passwd = 'パスワード';
- //PDO オブジェクトを構築する
試してください {
-
} catch (例外 - $e) {
エコー f'データベースに接続できません! -
-
️と
}
?>
注: DSN はデータ ソース名 - データ ソース名で、データベース接続情報を提供し、PDO ドライバー名 (MySQL、SQLite、PostgreSQL など)、コロン、およびドライバー固有の構文の 3 つの部分が含まれます。しかし、通常の状況では、これらを覚えるのは困難です。php マニュアルをダウンロードして確認することも、php の公式 Web サイトで確認することもできます。
-
2. Query メソッドを使用してデータをクエリします #1 に基づいて、データベースに正常に接続した後、SQL ステートメントを構築し、クエリ メソッドを呼び出して構造体配列を返し、foreach を介してデータ結果を走査します。コードは次のとおりです: PHPコード
- ファイル:pdo-query.php
- url:http:
-
-
- $dsn = 'mysql:host=localhost;dbname=pdotest';
$ユーザー名 =
'root';
- $passwd = 'パスワード';
試してください { -
- $title =
'title1';
造构 // SQL ステートメントを構築します-
L q $ sql =
- "select*from blog where title = '" . $ table. "'";
// クエリを実行し、結果を走査します
印刷する
印刷する
}
} catch (PDOException
$e) { -
データをクエリするとエラーが発生します!
️と
}
- ?>
-
注釈: 通常の状況では、クエリ、更新、挿入、および削除を実行する SQL ステートメントを構築することにより、where 条件を指定する必要があるため、SQL インジェクションの問題を防ぐことは避けられません。
- 3. 準備メソッドと実行メソッドを使用してデータをクエリする 使用する SQL クエリが頻繁に使用されないクエリである場合、クエリまたは準備メソッドと実行メソッドを使用することに大きな違いはなく、クエリの速度は向上します。遠すぎないでください。 2 つの違いは、クエリを使用する場合、php によってデータベースに送信される SQL を実行するたびにコンパイルする必要があることですが、prepare メソッドとexecute メソッドを使用する場合はその必要がないため、大規模な同時実行操作を実行する場合は、準備メソッドと実行メソッドを使用すると、利点がより明らかになります。 prepare メソッドとexecute メソッドを使用するには、a) SQL を構築する、b) SQL を PDO->prepart メソッドに渡して PDOStatement オブジェクトを取得する、3) PDOStatement オブジェクトの実行メソッドを呼び出す、4 という手順はそれほど多くありません。 ) PDOStatement->fetch または PDOStatement->fetchObject を渡して、結果セットを走査します。コードは次のとおりです:
PHPコード
- ファイル:pdo-prepare-fetch.php
- url:http:
-
- $dsn = 'mysql:host=localhost;dbname=pdotest';
$ユーザー名 =
'root';
- $passwd = 'パスワード';
- //リクエストからタイトルパラメータ値を取得します
$title =
$_GET[- 'タイトル'];
試してください { -
-
造 构 // SQL ステートメントを構築し、バインディング変数を使用します
L q $ sql =
b b b -
- =: タイトル ";
// SQL をコンパイルする
️
//バインド変数に値を代入します
️ $stmt->bindParam(":title",
$title, PDO::PARAM_STR);
- //SQLを実行
合联 // 配列の組み合わせで結果を取得し、その結果を走査します
印刷する
印刷する
- }
- } catch (PDOException
- データをクエリするとエラーが発生します
️と
}
- ?>
- 上記の PDO::FETCH_ASSOC を使用して連想配列を返すことに加えて、 fetchObject メソッドを使用して結果セット オブジェクトを返すこともできます。 コードは次のとおりです。Php代コード
- ファイル:pdo-prepare-fetch-object.php
- url:http:
-
- $dsn = 'mysql:host=localhost;dbname=pdotest';
- $ユーザー名 = 'root';
- $passwd = 'パスワード';
-
- $title = $_GET['title'];
- 試してみる {
- $dbh = 新しい PDO($dsn, $username, $passwd);
- echo 'データベースに正常に接続しました!'."
";
-
- $sql = "SELECT * FROM ブログ WHERE title = :title";
- $stmt = $dbh->prepare($sql);
- $stmt->bindParam(":title", $title, PDO::PARAM_STR);
- $stmt->execute();
-
- while ($row = $stmt->fetchObject()) {
- print $row->id."t";
- print $row->title."t";
- }
- } キャッチ (例外 $e) {
- echo 'データをクエリするとエラーが発生します!n';
- echo $e->getMessage();
- }
- ?>
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コード
-
- …
- 試してください {
- …
} catch (例外 - $e) {
oEcho er'errs 操作時に発生します! '。
-
️
错取 // エラーコードを取得します
️
出取 // ファイル名が間違っています
出取 // 行を間違えます
️
- }
- ?>
5. 準備メソッドと実行メソッドを使用してデータを挿入/更新します
- このメソッドは、構築された SQL ステートメントが挿入ステートメントまたは更新ステートメントであることを除いて、#3 のクエリと似ています。コードは次のとおりです。