MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
PHPとデータベース - SELECTのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
PHPとデータベース - SELECT
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == データベース操作において、最初に行うものは接続の確立である。<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> == 単一のレコードの抽出 == <code>PDO::fetch</code>メソッドは、1レコードのみ取得する。<br> <br> <syntaxhighlight lang="php"> try { $pdo = new PDO( 'mysql:host=<ホスト名またはIPアドレス>;dbname=<データベース名>;charset=utf8mb4', '<DBユーザ名>', '<DBユーザのパスワード>', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] ); $stmt = $pdo->prepare('SELECT * FROM users'); $stmt->execute(); $record = $pdo->fetch(PDO::FETCH_ASSOC) } catch (PDOException $e) { die('接続エラー: ' . $e->getMessage()); } </syntaxhighlight> <br> 繰り返し文を使用することにより、該当する複数のレコードを取得することができる。<br> <br> <u>※注意</u><br> <u>大量のレコードを処理する場合は、メモリ使用量を考慮して<code>fetch</code>メソッドを使用したループ処理が推奨される。</u><br> <syntaxhighlight lang="php"> try { $pdo = new PDO( 'mysql:host=<ホスト名またはIPアドレス>;dbname=<データベース名>;charset=utf8mb4', '<DBユーザ名>', '<DBユーザのパスワード>', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] ); $stmt = $pdo->prepare('SELECT * FROM users'); $stmt->execute(); while ($record = $pdo->fetch(PDO::FETCH_ASSOC)) { echo htmlspecialchars($record['name'], ENT_QUOTES, 'UTF-8'); echo htmlspecialchars($record['address'], ENT_QUOTES, 'UTF-8'); } } catch (PDOException $e) { die('接続エラー: ' . $e->getMessage()); } $stmt = null; $pdo = null; </syntaxhighlight> <br><br> == 複数のレコードの取得 == <code>PDO::fetchAll</code>メソッドは、該当するレコードを全て取得して、連想配列に変換する。<br> 複数のレコードに対して処理を行う場合は、その連想配列をforeach文で1レコードずつ取得する。<br> <br> <syntaxhighlight lang="php"> $records = $pdo->fetchAll(PDO::FETCH_ASSOC); foreach ($records as $record) { echo htmlspecialchars($record['name']); echo htmlspecialchars($record['address']); } </syntaxhighlight> <br> 以下の例では、usersテーブルから指定値以上のageカラムのレコードを全件抽出している。<br> <syntaxhighlight lang="php"> $stmt = $pdo->prepare('SELECT * FROM users WHERE age > :age'); $stmt->execute([':age' => 20]); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($records as $record) { echo htmlspecialchars($record['name'], ENT_QUOTES, 'UTF-8'); echo htmlspecialchars($record['address'], ENT_QUOTES, 'UTF-8'); } </syntaxhighlight> <br> プリペアードステートメントにおいて、以下に示すような記述がある。<br> <br> 一般的には前者のシンタックス (コロンなし) が推奨される。<br> これは、コードの一貫性を保ちやすく、より簡潔だからである。<br> <br> <syntaxhighlight lang="php"> $stmt->execute(['age' => 20]); // OK $stmt->execute([':age' => 20]); // OK </syntaxhighlight> <br> また、PDOの内部でプレースホルダーの処理が適切に行われるため、キーにコロンをつける必要はない。<br> <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:Web]]
PHPとデータベース - SELECT
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse