ホームページ バックエンド開発 PHPチュートリアル PDO プリペアドステートメント PDOStatement オブジェクト

PDO プリペアドステートメント PDOStatement オブジェクト

Jul 03, 2018 pm 04:53 PM
pdo 準備されたステートメント

この記事では、主に PDO 前処理ステートメント PDOStatement オブジェクトの使用方法の概要を紹介します。この記事では、PDOStatement のメソッドと一般的なメソッドの例を紹介します。必要な方は、

PDO 前処理ステートメントのサポートを参照してください。 PDOStatement クラス オブジェクトを使用する必要がありますが、このクラス オブジェクトは NEW キーワードによってインスタンス化されず、PDO オブジェクトの prepare() メソッドを通じてデータベース サーバーで前処理された SQL ステートメントを準備した後に直接返されます。以前に PDO オブジェクトで query() メソッドを実行することによって返された PDOStatement クラス オブジェクトが結果セット オブジェクトのみを表す場合。また、PDO オブジェクト内の prepare() メソッドを実行して生成される PDOStatement クラス オブジェクトがクエリ オブジェクトの場合、パラメータ化された SQL コマンドを定義して実行できます。 PDOStatement クラスのすべてのメンバー メソッドは次のとおりです:

PDOStatement::bindColumn — 绑定一列到一个 PHP 变量
PDOStatement::bindParam — 绑定一个参数到指定的变量名
PDOStatement::bindValue — 把一个值绑定到一个参数
PDOStatement::closeCursor — 关闭游标,使语句能再次被执行。
PDOStatement::columnCount — 返回结果集中的列数
PDOStatement::debugDumpParams — 打印一条 SQL 预处理命令
PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE
PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息
PDOStatement::execute — 执行一条预处理语句
PDOStatement::fetch — 从结果集中获取下一行
PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组
PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。
PDOStatement::fetchObject — 获取下一行并作为一个对象返回。
PDOStatement::getAttribute — 检索一个语句属性
PDOStatement::getColumnMeta — 返回结果集中一列的元数据
PDOStatement::nextRowset — 在一个多行集语句句柄中推进到下一个行集
PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数
PDOStatement::setAttribute — 设置一个语句属性
PDOStatement::setFetchMode — 为语句设置默认的获取模式。
ログイン後にコピー

1. ステートメントの準備

各反復で異なるパラメーターを使用して、SQL クエリを繰り返し実行します。この場合、準備されたステートメントを使用するのが最も効率的です。プリペアドステートメントを使用するには、まずデータベースサーバーに「SQL ステートメント」を準備する必要がありますが、すぐに実行する必要はありません。 PDO は、この前処理された SQL ステートメントに変数をバインドするための「プレースホルダー」構文の使用をサポートしています。準備された SQL ステートメントの場合、実行のたびに一部の列の値を変更する必要がある場合は、特定の列の値の代わりに「プレースホルダー」を使用する必要があります。 PDO でプレースホルダーを使用する構文には、「名前付きパラメーター」と「疑問符パラメーター」の 2 つがあります。どちらの構文を使用するかは個人の好みによって異なります。

名前付きパラメーターをプレースホルダーとして使用してステートメントを挿入:

$dbh->prepare(“insert into contactinfo(name,address,phone) values(:name,:address,:phone)”);
ログイン後にコピー

文字列を「名前付きパラメーター」としてカスタマイズする必要があります。各名前付きパラメーターはコロン (:) で始まる必要があり、パラメーター名前は意味のあるものでなければならず、対応するフィールド名と同じであることが望ましいです。
疑問符 (?) パラメータをプレースホルダとして使用してステートメントを挿入します。

$dbh->prepare(“insert into contactinfo(name,address,phone) values(?,?,?)”);
ログイン後にコピー

疑問符パラメータはフィールドの位置順序に対応している必要があります。どのパラメータがプレースホルダで構成されるクエリとして使用されるか、ステートメントでプレースホルダが使用されないかに関係なく、PDO オブジェクトの prepare() メソッドを使用して、反復実行に使用されるクエリを準備する必要があります。 PDOStatement クラスのオブジェクト。

2. バインディング パラメータ

SQL ステートメントが PDO オブジェクトの prepare() メソッドを通じてデータベース サーバー上で準備されるとき、プレースホルダーが使用されている場合は、実行するたびに入力パラメータを置き換える必要があります。 PDOStatement オブジェクトのbindParam() メソッドを使用して、パラメーター変数を準備されたプレースホルダーにバインドできます (位置または名前が対応している必要があります)。メソッドbindParame()のプロトタイプは次のとおりです:

bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )
ログイン後にコピー

最初のパラメータパラメータが必要です。プレースホルダ構文が準備されたクエリで名前パラメータを使用する場合、名前パラメータ文字列がbindParam()メソッドとして使用されます。最初のパラメータとして指定されます。プレースホルダー構文で疑問符引数を使用する場合、準備されたクエリ内の列値プレースホルダーのインデックス オフセットが最初の引数としてメソッドに渡されます。

2 番目のパラメーター変数もオプションであり、最初のパラメーターで指定されたプレースホルダーの値を提供します。パラメーターは参照によって渡されるため、値を直接指定することはできず、変数のみをパラメーターとして指定できます。

3 番目のパラメーター data_type はオプションで、現在バインドされているパラメーターのデータ型を設定します。次の値を指定できます。

PDO::PARAM_BOOL はブール データ型を表します。
PDO::PARAM_NULL は SQL の NULL 型を表します。
PDO::PARAM_INT は、SQL の INTEGER データ型を表します。
PDO::PARAM_STR は、SQL の CHAR、VARCHAR、およびその他の文字列データ型を表します。
PDO::PARAM_LOB は、SQL のラージ オブジェクト データ型を表します。

4 番目のパラメーターの長さはオプションであり、データ型の長さを指定するために使用されます。

5 番目のパラメーター driver_options はオプションであり、このパラメーターを通じてデータベース ドライバー固有のオプションを提供します。
名前付きパラメーターをプレースホルダーとして使用するパラメーター バインディングの例:

<?php
//...省略PDO连接数据库代码
$query = "insert into contactinfo (name,address,phone) values(:name,:address,:phone)";
$stmt = $dbh->prepare($query);          //调用PDO对象中的prepare()方法
 
$stmt->blinparam(&#39;:name&#39;,$name);        //将变量$name的引用绑定到准备好的查询名字参数":name"中
$stmt->blinparam(&#39;:address&#39;,$address);
$stmt->blinparam(&#39;:phone&#39;,phone);
//...
?>
ログイン後にコピー

疑問符 (?) をプレースホルダーとして使用するパラメーター バインディングの例:

<?php
//...省略PDO连接数据库代码
$query = "insert into contactinfo (name,address,phone) values(?,?,?)";
$stmt = $dbh->prepare($query);          //调用PDO对象中的prepare()方法
 
$stmt->blinparam(1,$name,PDO::PARAM_STR);        //将变量$name的引用绑定到准备好的查询名字参数":name"中
$stmt->blinparam(2,$address,PDO::PARAM_STR);
$stmt->blinparam(3,phone,PDO::PARAM_STR,20);
//...
?>
ログイン後にコピー

3、準備されたステートメントを実行します

プリペアド ステートメントが完了し、対応するパラメータがバインドされたら、PDOStatement クラス オブジェクトのexecute() メソッドを呼び出すことで、データベース キャッシュ内のプリペアド ステートメントを繰り返し実行できます。次の例では、前処理を使用して、前に提供した contactinfo テーブルで同じ INSERT ステートメントを継続的に実行し、異なるパラメーターを変更することで 2 つのレコードを追加します。以下に示すように:

<?php 
try {
     $dbh = new PDO(&#39;mysql:dbname=testdb;host=localhost&#39;, $username, $passwd);
}catch (PDOException $e){
    echo &#39;数据库连接失败:&#39;.$e->getMessage();
    exit;
}
 
$query = "insert into contactinfo (name,address,phone) values(?,?,?)";
$stmt = $dbh->prepare($query);
 
$stmt->blinparam(1,$name);      
$stmt->blinparam(2,$address);
$stmt->blinparam(3,phone);
 
$name = "赵某某";
$address = "海淀区中关村";
$phone = "15801688348";
 
$stmt->execute();           //执行参数被绑定后的准备语句
?>
ログイン後にコピー

入力パラメーターを渡すだけで、そのようなパラメーターを多数渡す必要がある場合は、以下に示すショートカット構文が非常に便利であることがわかります。これは、execute() メソッドにオプションのパラメータを指定することで、実行中に前処理されたクエリの入力パラメータを置き換える 2 番目の方法です。これは、準備されたクエリ内の名前付きパラメータ プレースホルダの配列です。この構文を使用すると、$stmt->bindParam() の呼び出しを省略できます。上記の例を次のように変更します。

<?php 
//...省略PDO连接数据库代码
$query = "insert into contactinfo (name,address,phone) values(?,?,?)";
$stmt = $dbh->prepare($query); 
 
//传递一个数组为预处理查询中的命名参数绑定值,并执行一次。
$stmt->execute(array("赵某某","海淀区","15801688348"));
?>
ログイン後にコピー

さらに、INSERT ステートメントが実行され、データ テーブルに自動的に増加する ID フィールドがある場合は、PDO オブジェクトの lastinsertId() メソッドを使用して取得できます。データテーブルへの最後の挿入。 のレコード ID。他の DML ステートメントが正常に実行されたかどうかを確認する必要がある場合は、PDOStatement クラス オブジェクトの rowCount() メソッドを使用して、レコードに影響を与える行数を取得できます。

上記がこの記事の全内容です。皆様の学習に役立つことを願っています。その他の関連コンテンツについては、PHP 中国語 Web サイトに注目してください。

関連する推奨事項:

thinkPHP2.1 カスタム タグ ライブラリのインポート方法の紹介

pthreads を使用して実際の機能を実現するPHP マルチスレッド方式

以上がPDO プリペアドステートメント PDOStatement オブジェクトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 致命的エラーの解決策: 未定義メソッド PDO::prepare() の呼び出し PHP 致命的エラーの解決策: 未定義メソッド PDO::prepare() の呼び出し Jun 22, 2023 pm 06:40 PM

PHP は、長い間使用されている人気のある Web 開発言語です。 PHP に統合された PDO (PHP Data Object) クラスは、Web アプリケーションの開発中にデータベースと対話する一般的な方法です。ただし、一部の PHP 開発者がよく遭遇する問題は、PDO クラスを使用してデータベースと対話するときに、次のようなエラーが表示されることです。

PHP の PDO_PGSQL 拡張機能を使用するにはどうすればよいですか? PHP の PDO_PGSQL 拡張機能を使用するにはどうすればよいですか? Jun 02, 2023 pm 06:10 PM

PHP は人気のあるプログラミング言語として、Web 開発の分野で広く使用されています。その中でも、PHP の PDO_PGSQL 拡張機能は一般的に使用されている PHP 拡張機能で、PostgreSQL データベースとの対話型インターフェイスを提供し、PHP と PostgreSQL 間のデータ送信と対話を実現できます。この記事では、PHPのPDO_PGSQL拡張機能の使い方を詳しく紹介します。 1. PDO_PGSQL 拡張機能とは何ですか? PDO_PGSQL は PHP の拡張ライブラリです。

PHP と PDO: 一括挿入と更新を実行する方法 PHP と PDO: 一括挿入と更新を実行する方法 Jul 28, 2023 pm 07:41 PM

PHP と PDO: バッチ挿入およびバッチ更新を実行する方法 はじめに: PHP を使用してデータベース関連アプリケーションを作成する場合、データをバッチ挿入および更新する必要がある状況によく遭遇します。従来のアプローチでは、ループを使用して複数のデータベース操作を実行しますが、この方法は非効率的です。 PHP の PDO (PHPDataObject) は、バッチ挿入および更新操作を実行するためのより効率的な方法を提供します。この記事では、PDO を使用してバッチ挿入および更新操作を実装する方法を紹介します。 1. PDO の概要: PDO は PH です

PHP PDO と mysqli: 比較対照 PHP PDO と mysqli: 比較対照 Feb 19, 2024 pm 12:24 PM

PDOPDO は、PHP に統合インターフェイスを提供するオブジェクト指向のデータベース アクセス抽象化レイヤーであり、同じコードを使用して異なるデータベース (Mysql、postgresql、oracle など) と対話できるようにします。 PDO は、基礎となるデータベース接続の複雑さを隠し、データベース操作を簡素化します。長所と短所 長所: 統一されたインターフェイス、複数のデータベースのサポート、データベース操作の簡素化、開発の困難さの軽減、プリペアドステートメントの提供、セキュリティの向上、トランザクション処理のサポート 短所: パフォーマンスはネイティブ拡張よりわずかに低い場合があり、外部ライブラリに依存し、オーバーヘッドが増加する可能性があります。デモ コードでは PDO を使用します。 mysql データベースに接続します: $db=newPDO("mysql:host=localhost;dbnam

PHP と PDO: データベース内の JSON データを処理する方法 PHP と PDO: データベース内の JSON データを処理する方法 Jul 29, 2023 pm 05:17 PM

PHP と PDO: データベースで JSON データを処理する方法 現代の Web 開発では、大量のデータを処理して保存することが非常に重要なタスクです。モバイル アプリケーションとクラウド コンピューティングの人気に伴い、JSON (JavaScript Object Notation) 形式でデータベースに保存されるデータがますます増えています。一般的に使用されるサーバー側言語として、PHP の PDO (PHPDataObject) 拡張機能は、データベースを処理および操作するための便利な方法を提供します。本

PHP と PDO: ページング クエリを実行してデータを表示する方法 PHP と PDO: ページング クエリを実行してデータを表示する方法 Jul 29, 2023 pm 04:10 PM

PHP と PDO: ページ内のデータをクエリして表示する方法 Web アプリケーションを開発する場合、ページ内のデータをクエリして表示することは非常に一般的な要件です。ページングにより、一度に一定量のデータを表示できるため、ページの読み込み速度とユーザー エクスペリエンスが向上します。 PHP では、PHP データ オブジェクト (PDO) ライブラリを使用して、ページング クエリとデータの表示の機能を簡単に実現できます。この記事では、PHP で PDO を使用してページごとにデータをクエリおよび表示する方法と、対応するコード例を紹介します。 1. データベースとデータテーブルを作成する

PDO を使用して Redis データベースに接続する方法 PDO を使用して Redis データベースに接続する方法 Jul 28, 2023 pm 04:29 PM

PDO を使用して Redis データベースに接続する方法 Redis は、キャッシュ、キュー、その他のシナリオで一般的に使用される、オープン ソースの高性能のメモリ内ストレージのキー/値データベースです。 PHP 開発では、Redis を使用すると、アプリケーションのパフォーマンスと安定性を効果的に向上させることができます。 PDO (PHPDataObjects) 拡張機能を使用すると、Redis データベースに接続して操作することがより便利になります。この記事では、PDO を使用して Redis データベースに接続する方法をコード例とともに紹介します。最初に Redis 拡張機能をインストールします

PHP と PDO: データベースで全文検索を実行する方法 PHP と PDO: データベースで全文検索を実行する方法 Jul 30, 2023 pm 04:33 PM

PHP と PDO: データベースで全文検索を実行する方法 最新の Web アプリケーションでは、データベースは非常に重要なコンポーネントです。全文検索は、大量のデータから特定の情報を検索する必要がある場合に非常に便利な機能です。 PHP および PDO (PHPDataObjects) は、データベース内で全文検索を実行するためのシンプルかつ強力な方法を提供します。この記事では、PHP と PDO を使用して全文検索を実装する方法を紹介し、そのプロセスを示すサンプル コードをいくつか紹介します。初め

See all articles