様々なサンプルコード:PDO::execでデータベースを操作
PHPにおけるPDO::execを使用したデータベース操作の解説
PDO::exec は、PHPにおいて データベース操作 を行うための関数の一つです。INSERT、UPDATE、DELETE などのステートメントを実行し、影響を受けた行数を返します。SELECT ステートメント には使用できません。
PDO::exec の利点
- シンプルで分かりやすい構文
- 軽量で高速な処理
PDO::exec の注意点
- プレースホルダによるパラメーターバインディングに対応していない
- SQLインジェクションなどの脆弱性に注意が必要
PDO::exec の基本的な使用方法
<?php
$dsn = 'データベース接続情報';
$username = 'ユーザー名';
$password = 'パスワード';
try {
$dbh = new PDO($dsn, $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'INSERT INTO users (name, email) VALUES (?, ?)';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $email);
$name = '田中 太郎';
$email = '[email protected]';
$stmt->execute();
$affectedRows = $stmt->rowCount();
echo $affectedRows . "件のレコードが挿入されました。";
} catch (PDOException $e) {
echo "エラー発生:" . $e->getMessage();
}
$dbh = null;
上記コードの説明
- データベース接続情報、ユーザー名、パスワードを定義します。
- PDOオブジェクトを作成し、エラーモードを例外スローイングに設定します。
- INSERT ステートメントを準備し、プレースホルダを ? で定義します。
- プレースホルダにバインドする変数を定義します。
- 挿入するデータを設定します。
- ステートメントを実行します。
- 影響を受けた行数を取得し、メッセージを出力します。
- エラーハンドリングを行います。
- データベース接続を閉じます。
PDO::exec の応用例
- データベースへのレコード挿入
- データベースのレコード更新
- より複雑なデータベース操作には、PDO::prepare と PDOStatement::execute を組み合わせた方法が推奨されます。
- データベース操作を行う際には、常に セキュリティ対策 に注意する必要があります。
PHPにおけるPDO::execを使用したデータベース操作のサンプルコード集
このセクションでは、PDO::execを使用した様々なデータベース操作のサンプルコードを紹介します。
データベースへのレコード挿入
<?php
$dsn = 'データベース接続情報';
$username = 'ユーザー名';
$password = 'パスワード';
try {
$dbh = new PDO($dsn, $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'INSERT INTO users (name, email) VALUES (?, ?)';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $email);
$name = '田中 太郎';
$email = '[email protected]';
$stmt->execute();
echo "レコードが挿入されました。";
} catch (PDOException $e) {
echo "エラー発生:" . $e->getMessage();
}
$dbh = null;
データベースのレコード更新
<?php
$dsn = 'データベース接続情報';
$username = 'ユーザー名';
$password = 'パスワード';
try {
$dbh = new PDO($dsn, $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'UPDATE users SET email = ? WHERE id = ?';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(1, $email);
$stmt->bindParam(2, $id);
$email = '[email protected]';
$id = 1;
$stmt->execute();
echo "レコードが更新されました。";
} catch (PDOException $e) {
echo "エラー発生:" . $e->getMessage();
}
$dbh = null;
データベースのレコード削除
<?php
$dsn = 'データベース接続情報';
$username = 'ユーザー名';
$password = 'パスワード';
try {
$dbh = new PDO($dsn, $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'DELETE FROM users WHERE id = ?';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(1, $id);
$id = 1;
$stmt->execute();
echo "レコードが削除されました。";
} catch (PDOException $e) {
echo "エラー発生:" . $e->getMessage();
}
$dbh = null;
トランザクション処理
<?php
$dsn = 'データベース接続情報';
$username = 'ユーザー名';
$password = 'パスワード';
try {
$dbh = new PDO($dsn, $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();
// 処理1を実行
$sql1 = 'INSERT INTO users (name, email) VALUES (?, ?)';
$stmt1 = $dbh->prepare($sql1);
$stmt1->bindParam(1, $name1);
$stmt1->bindParam(2, $email1);
$name1 = '佐藤 花子';
$email1 = '[email protected]';
$stmt1->execute();
// 処理2を実行
$sql2 = 'UPDATE articles SET title = ? WHERE id = ?';
$stmt2 = $dbh->prepare($sql2);
$stmt2->bindParam(1, $title2);
$stmt2->bindParam(2, $id2);
$title2 = '新しい記事タイトル';
$id2 = 10;
$stmt2->execute();
$dbh->commit();
echo "トランザクション処理が成功しました。";
} catch (PDOException $e) {
$dbh->rollBack();
echo "エラー発生:" . $e->getMessage();
}
$dbh = null;
エラーハンドリング
<?php
$dsn = 'データベース接続情報';
$username = 'ユーザー名';
$password = 'パスワード';
try {
$dbh = new PDO($dsn, $username
PDO::exec 以外のデータベース操作方法
PDO::exec 以外にも、PHP でデータベース操作を行う方法はいくつかあります。それぞれの特徴と使い分けを以下に説明します。
PDO::prepare と PDOStatement::execute
PDO::prepare と PDOStatement::execute の組み合わせは、パラメーターバインディングに対応しており、SQLインジェクション対策にも有効です。INSERT、UPDATE、DELETE だけでなく、SELECT ステートメントにも使用できます。
<?php
$dsn = 'データベース接続情報';
$username = 'ユーザー名';
$password = 'パスワード';
try {
$dbh = new PDO($dsn, $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'SELECT * FROM users WHERE id = ?';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(1, $id);
$id = 1;
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
echo $row['name'] . " (" . $row['email'] . ")\n";
}
} catch (PDOException $e) {
echo "エラー発生:" . $e->getMessage();
}
$dbh = null;
PDOStatement::query
PDOStatement::query は、SELECT ステートメントのみで使用できるメソッドです。PDO::prepare と PDOStatement::execute よりもシンプルですが、パラメーターバインディングには対応しておらず、SQLインジェクション対策にも注意が必要です。
<?php
$dsn = 'データベース接続情報';
$username = 'ユーザー名';
$password = 'パスワード';
try {
$dbh = new PDO($dsn, $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'SELECT * FROM users WHERE id = 1';
$stmt = $dbh->query($sql);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
echo $row['name'] . " (" . $row['email'] . ")\n";
}
} catch (PDOException $e) {
echo "エラー発生:" . $e->getMessage();
}
$dbh = null;
その他の方法
- mysqli などの拡張モジュール: PDO 以外にも、データベース操作を行うための拡張モジュールがいくつかあります。
- ODBC などのデータベースドライバ: ODBC などのデータベースドライバを使用して、データベースに接続することもできます。
使い分け
- シンプルで高速な処理が必要な場合: PDO::exec
- パラメーターバインディングが必要な場合、SQLインジェクション対策をしたい場合**: PDO::prepare と PDOStatement::execute
- SELECT ステートメントのみを実行する場合: PDOStatement::query
- 複雑なデータベース操作が必要な場合: mysqli などの拡張モジュール、ODBC などのデータベースドライバ
- 使用するデータベースや目的に合った方法を選択してください。
PDOStatement::nextRowset以外の方法
PDOStatement::nextRowset は、複数の結果セットを返す SQL クエリを実行する際に、次の結果セットに移動するためのメソッドです。これは、ストアドプロシージャなど、複数の結果セットを返すことができるデータベース操作で特に役立ちます。
初心者向け解説:PHP vfprintf 関数でフォーマットされた文字列を書き込む
vfprintf 関数は、printf 関数と似ていますが、可変引数ではなく、フォーマット文字列と引数の配列を受け取ります。これは、複数の変数をフォーマットされた文字列に挿入したい場合に便利です。構文引数handle: 書き込み先のストリームリソース。ファイルポインタ、標準出力ストリーム (STDOUT) などが指定できます。
PHPで文字列を連結する7つの方法:連結演算子、heredoc、nowdoc、sprintf、implode、str_repeat、substr_replace
String は PHP における文字列型を表します。正規表現は、文字列処理において非常に強力なツールであり、さまざまな操作に使用できます。preg_last_error_msg と String の関連性preg_last_error_msg は、String 型の値を返します。この値は、直前の正規表現処理におけるエラーメッセージです。具体的なエラーメッセージは、PCRE のエラーコードに基づいて生成されます。
【PHP】"strcoll" 関数 vs "strcmp" 関数 vs "strnatcmp" 関数:徹底比較
strcoll 関数は、2つの文字列をバイト単位で比較し、現在のロケール設定に基づいて結果を返します。ロケールとは、言語、文字セット、並び順序などの地域固有の設定を定義するものです。機能2つの文字列をバイト単位で比較します。大文字と小文字を区別します。
PHPで文字列の末尾にある空白をスッキリ削除! rtrim 関数の使い方とサンプルコード
使い方string: 処理対象の文字列characters (オプション): 削除したい空白文字の種類。省略した場合、以下の空白文字が削除されます。 スペース () タブ (\t) 改行 (\n) 水平タブ (\x0B) NULL文字 (\0)
PHPでXMLエラーをデバッグする:libxml_clear_errors関数とエラーハンドラ
使用方法この関数は引数を取らず、単にエラーバッファの内容を消去します。例この例では、無効なXML文字列を解析し、エラーが発生した場合にエラーメッセージを出力します。その後、libxml_clear_errors関数を使用してエラーバッファを消去します。
エンコーディングに惑わされない!mb_strrpos関数でマルチバイト文字列を攻略
mb_strrpos 関数の概要mb_strrpos(haystack, needle [, offset [, encoding]])haystack: 検索対象の文字列needle: 検索する文字列offset: 検索開始位置(省略可)
PHP で文字列を正確に扱う:mb_strwidth 関数と文字エンコーディング
mb_strwidth の概要:マルチバイト文字列の幅を取得します。文字エンコーディングを考慮します。半角文字は 1、全角文字は 2 とカウントします。オプションで、文字種ごとに異なる幅を指定できます。mb_strwidth の使い方:この例では、mb_strwidth 関数は、$str 文字列の幅を 14 と計算します。これは、こんにちは、世界! という文字列には、半角文字が 8 文字、全角文字が 6 文字含まれているためです。
サンプルコード満載!PHPでXSLTProcessor::__constructを使いこなす
XSLT は、XML 文書を変換するためのスタイルシート言語です。XSLT スタイルシートは、XML 文書内の要素をどのように処理し、出力するかを定義します。XSLT を使用することで、XML 文書を HTML、テキスト、PDF などのさまざまな形式に変換することができます。
PHPで文字列の末尾にある空白をスッキリ削除! rtrim 関数の使い方とサンプルコード
使い方string: 処理対象の文字列characters (オプション): 削除したい空白文字の種類。省略した場合、以下の空白文字が削除されます。 スペース () タブ (\t) 改行 (\n) 水平タブ (\x0B) NULL文字 (\0)