ホームページ > バックエンド開発 > PHPチュートリアル > PDO を使用してデータベースを操作するための PHP の方法とテクニック

PDO を使用してデータベースを操作するための PHP の方法とテクニック

PHPz
リリース: 2023-06-08 13:44:02
オリジナル
1744 人が閲覧しました

PHP は、Web 開発によく使用されるサーバー側プログラミング言語です。 Web 開発では、データベースの操作は非常に一般的な要件です。 PDO (PHP Data Objects) は、データベースを操作するための PHP の拡張ライブラリであり、MySQL、PostgreSQL、Oracle などの主流のデータベース管理システムに接続するために使用できます。

この記事では、データベースへの接続、SQL ステートメントの実行、結果セットの処理など、PDO を使用してデータベースを操作する PHP の方法とテクニックを紹介します。

  1. データベースへの接続

まず、データベースに接続する必要があります。 PDO では、次のコードを使用して PDO オブジェクトを作成できます。

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
ログイン後にコピー

ここで、localhost はデータベースが配置されているホスト名 (IP アドレスの場合もあります)、test は接続するデータベースの名前、$user$pass はそれぞれデータベースのユーザー名とパスワードです。必要に応じて上記のパラメータを変更できます。

  1. SQL ステートメントの実行

データベースに接続したら、SQL ステートメントを実行できます。 PDO には、SQL ステートメントを実行するためのメソッドがいくつか用意されています。一般的に使用されるメソッドは次のとおりです:

  • exec($query): INSERT、UPDATE、DELETE などの操作を実行し、影響を受ける行数;
  • query($query): SELECT ステートメントを実行し、結果セットを返します;
  • prepare($query) : SQL ステートメントを準備すると、PDOStatement オブジェクトが返されます。このオブジェクトは、bindValue() メソッドを通じてパラメータをバインドした後に実行できます。

たとえば、次のコードを使用して、users テーブル内のすべてのレコードをクエリできます。

$stmt = $dbh->query("SELECT * FROM users");
while ($row = $stmt->fetch()) {
    echo $row['id'] . "    " . $row['name'] . "
";
}
ログイン後にコピー

上記のコードでは、$dbh は PDO オブジェクトです。query() メソッドを使用して SELECT ステートメントを実行し、PDOStatement オブジェクトを返します。 fetch() メソッドを通じて結果セット内のデータの各行をループし、画面に出力できます。

  1. 結果セットの処理

SELECT ステートメントの実行後、PDOStatement オブジェクトを通じて結果セット内のデータにアクセスできます。 PDO には、結果セットにアクセスするためのメソッドがいくつか用意されています。一般的に使用されるメソッドをいくつか示します:

  • fetch(): 結果セット内のデータの次の行を取得し、連想配列を返します。 array;
  • fetchAll(): 結果セット内のすべてのデータを取得し、2 次元の連想配列を返します;
  • rowCount() : 結果セット番号の行を取得します。

たとえば、次のコードを使用して、users テーブル内の ID 1 のユーザー情報をクエリできます。

$stmt = $dbh->prepare("SELECT * FROM users WHERE id=:id");
$stmt->bindValue(':id', 1, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch();
if ($row) {
    echo "ID: " . $row['id'] . "
";
    echo "Name: " . $row['name'] . "
";
    echo "Email: " . $row['email'] . "
";
} else {
    echo "Not found.
";
}
ログイン後にコピー

上記のコードでは、 prepare( ) メソッドは SQL ステートメントを準備するために使用されます。形式 :name を使用して名前付きパラメータを定義できます。 bindValue() メソッドを通じてパラメーター値をバインドし、SQL ステートメント内のプレースホルダーに対応する execute() メソッドを実行できます。

  1. トランザクション処理

データベースを操作するとき、一連の SQL ステートメントを実行し、それらがすべて正常に実行されるか、どれも実行されないかを確認する必要がある場合があります。 。これにはトランザクションを使用する必要があります。 PDO は、トランザクションを処理するための beginTransaction()commit()rollBack() およびその他のメソッドを提供します。たとえば、次のようになります。上記のコードでは、

beginTransaction()

メソッドを使用してトランザクションを開始し、commit() メソッドを使用してトランザクションをコミットします。を実行すると、コードは catch ブロックの にジャンプし、rollBack() メソッドを実行してトランザクションをロールバックします。

前処理されたステートメント
  1. SQL ステートメントを実行するとき、変数を使用して SQL ステートメントを構築する必要がある場合があります。たとえば、次のとおりです。 SQL インジェクションのリスクがあるため、準備されたステートメントを使用する必要があります。 PDO は、プリペアド ステートメントを実装するための
prepare()

メソッドと

bindParam()

メソッドを提供します。例: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>try { $dbh-&gt;beginTransaction(); $dbh-&gt;exec(&quot;INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')&quot;); $dbh-&gt;exec(&quot;INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com')&quot;); $dbh-&gt;commit(); } catch (PDOException $e) { $dbh-&gt;rollBack(); echo &quot;Transaction failed: &quot; . $e-&gt;getMessage(); }</pre><div class="contentsignin">ログイン後にコピー</div></div> 上記のコードでは、プリペアド ステートメントを使用して次のことを行います。 :name はプレースホルダーとして使用されます。実行中、

$name

bindParam() メソッドを通じて :name にバインドされます。 , 実行すると、:name が実際の変数値に置き換えられ、SQL インジェクションのリスクが回避されます。 デバッグ スキル

    開発プロセスでは、SQL ステートメントの実行結果をデバッグする必要がよくあります。 PDO は、エラー情報を取得するための
  1. errorInfo()
  2. メソッドを提供します。例:
$name = "Tom";
$stmt = $dbh->query("SELECT * FROM users WHERE name='$name'");
ログイン後にコピー

上記のコードでは、クエリが失敗した場合、errorInfo() メソッドは次のようになります。エラー情報を取得して画面に出力するために呼び出されます。

概要

    この記事では、データベースへの接続、SQL ステートメントの実行、結果セットの処理など、PDO を使用してデータベースを操作する PHP の方法とテクニックを紹介します。 。 PDO を使用すると、さまざまなデータベース管理システムに接続でき、高品質の Web アプリケーションの開発に役立つ豊富なインターフェイスが提供されます。

以上がPDO を使用してデータベースを操作するための PHP の方法とテクニックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート