「PHPとデータベース - SELECT」の版間の差分
提供: MochiuWiki : SUSE, EC, PCB
📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
編集の要約なし |
|||
| 1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
データベース操作において、最初に行うものは接続の確立である。<br> | |||
<br> | |||
この時、データベースのホスト名、データベース名、ユーザ名、パスワード等の接続情報を指定する。<br> | |||
また、文字セットはUTF-8、エラーモードを適切に設定する。<br> | |||
<br> | |||
プリペアドステートメントは、SQLインジェクション対策として不可欠な機能である。<br> | |||
クエリの中で変数を直接使用せず、プレースホルダーを使用することで、SQLインジェクション攻撃からアプリケーションを守ることができる。<br> | |||
<br> | |||
データの取得方法には主に2つのアプローチがある。<br> | |||
* fetchメソッド | |||
*: 1レコードずつ取得する。 | |||
*: 大規模なデータセットを扱う場合は、メモリ効率を考慮してfetchメソッドを使用したループ処理が推奨される。 | |||
* fetchAllメソッド | |||
*: 結果セット全体を1度に取得する。 | |||
<br> | |||
トランザクション処理は、複数のクエリを1つの論理的な単位として実行する場合に使用する。<br> | |||
トランザクションを使用することにより、データの整合性を保ちながら、複数の操作を安全に実行することができる。<br> | |||
<br> | |||
また、データベース接続のクリーンアップも重要である。<br> | |||
使用が終わったステートメントやデータベース接続は、適切にクローズする必要がある。<br> | |||
これにより、システムリソースを効率的に管理することができる。<br> | |||
<br><br> | <br><br> | ||
2024年12月28日 (土) 02:38時点における版
概要
データベース操作において、最初に行うものは接続の確立である。
この時、データベースのホスト名、データベース名、ユーザ名、パスワード等の接続情報を指定する。
また、文字セットはUTF-8、エラーモードを適切に設定する。
プリペアドステートメントは、SQLインジェクション対策として不可欠な機能である。
クエリの中で変数を直接使用せず、プレースホルダーを使用することで、SQLインジェクション攻撃からアプリケーションを守ることができる。
データの取得方法には主に2つのアプローチがある。
- fetchメソッド
- 1レコードずつ取得する。
- 大規模なデータセットを扱う場合は、メモリ効率を考慮してfetchメソッドを使用したループ処理が推奨される。
- fetchAllメソッド
- 結果セット全体を1度に取得する。
トランザクション処理は、複数のクエリを1つの論理的な単位として実行する場合に使用する。
トランザクションを使用することにより、データの整合性を保ちながら、複数の操作を安全に実行することができる。
また、データベース接続のクリーンアップも重要である。
使用が終わったステートメントやデータベース接続は、適切にクローズする必要がある。
これにより、システムリソースを効率的に管理することができる。
単一のレコードの抽出
PDO::fetchメソッドは、1レコードのみ取得する。
$record = $pdo->fetch(PDO::FETCH_ASSOC)
繰り返し文を使用することにより、該当する複数のレコードを取得することができる。
while ($record = $pdo->fetch(PDO::FETCH_ASSOC)) {
echo htmlspecialchars($records['name']);
echo htmlspecialchars($records['address']);
}
複数のレコードの取得
PDO::fetchAllメソッドは、該当するレコードを全て取得して、連想配列に変換する。
複数のレコードに対して処理を行う場合は、その連想配列をforeach文で1レコードずつ取得する。
$records = $pdo->fetchAll(PDO::FETCH_ASSOC);
foreach ($records as $record) {
echo htmlspecialchars($record['name']);
echo htmlspecialchars($record['address']);
}