検索
ホームページバックエンド開発PHPチュートリアルPDO 準備済みステートメント PDOStatement オブジェクトの使用法の概要、pdopdostatement_PHP チュートリアル

PDO プリペアドステートメント PDOStatement オブジェクトの使用法の概要、pdopdostatement

PDO のプリペアド ステートメントのサポートには PDOStatement クラス オブジェクトの使用が必要ですが、このクラス オブジェクトは NEW キーワードによってインスタンス化されず、SQL ステートメントの直後に返される PDO オブジェクトの prepare() メソッドを通じてデータベース サーバーで準備されます。 。以前に 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 — 結果セットの次の行から 1 つの列を返します。
PDOStatement::fetchObject — 次の行を取得し、オブジェクトとして返します。
PDOStatement::getAttribute — ステートメント属性を取得する
PDOStatement::getColumnMeta — 結果セット内の列のメタデータを返す
PDOStatement::nextRowset — 複数行セット ステートメント ハンドルの次の行セットに進みます
PDOStatement::rowCount — 前の SQL ステートメントの影響を受けた行数を返します
PDOStatement::setAttribute — ステートメント属性を設定する
PDOStatement::setFetchMode — ステートメントのデフォルトのフェッチ モードを設定します。

1. 明細書を準備します

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

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

コードをコピーします コードは次のとおりです:

$dbh->prepare(“連絡先情報(名前,住所,電話)の値(:名前,:住所,:電話)に挿入”);

文字列を「名前付きパラメータ」としてカスタマイズする必要があります。各名前付きパラメータはコロン (:) で始まる必要があり、対応するフィールド名と同じ名前にするのが最善です。
疑問符 (?) パラメーターをプレースホルダーとして使用する INSERT ステートメント:
コードをコピーします コードは次のとおりです:

$dbh->prepare(“連絡先情報(名前,住所,電話)の値(?,?,?)に挿入”);

疑問符パラメータは、フィールドの位置順序に対応している必要があります。どのパラメータがプレースホルダで構成されるクエリとして使用されるか、ステートメントでプレースホルダが使用されないかに関係なく、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 はオプションであり、データベース ドライバ固有のオプションが指定されます。
名前付きパラメーターをプレースホルダーとして使用したパラメーター バインディングの例:

コードをコピーします コードは次のとおりです:

//...PDO 接続データベース コードを省略します
$query = "連絡先情報 (名前,住所,電話) の値(:名前,:住所,:電話)に挿入";
$stmt = $dbh->prepare($query); //PDO オブジェクトの prepare() メソッドを呼び出します

$stmt->blinparam(':name',$name); //変数 $name の参照を、準備されたクエリ名パラメーター ":name" にバインドします
$stmt->blinparam(':アドレス',$アドレス);
$stmt->blinparam(':phone',phone);
//...
?>

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

コードをコピーします コードは次のとおりです:

//...PDO 接続データベース コードを省略します
$query = "連絡先情報 (名前、住所、電話番号) の値 (?,?,?) に挿入";
$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 つのレコードを追加します。以下に示すように:

コードをコピーします コードは次のとおりです:

試してみてください{
$dbh = 新しい PDO('mysql:dbname=testdb;host=localhost', $username, $passwd);
}キャッチ (PDOException $e){
echo 'データベース接続に失敗しました:'.$e->getMessage();
終了します;
}

$query = "連絡先情報 (名前、住所、電話番号) の値 (?,?,?) に挿入";
$stmt = $dbh->prepare($query);

$stmt->blinparam(1,$name); $stmt->blinparam(2,$address);
$stmt->blinparam(3,phone);

$name = "趙 XX";
$address = "海淀区中関村";
$phone = "15801688348";

$stmt->execute(); //実行パラメータがバインドされた後の準備されたステートメント
?>

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

コードをコピーします コードは次のとおりです:

//...PDO 接続データベース コードを省略します
$query = "連絡先情報 (名前、住所、電話番号) の値 (?,?,?) に挿入";
$stmt = $dbh->準備($query);
// 配列を渡して、前処理されたクエリ内の名前付きパラメータに値をバインドし、1 回実行します。
$stmt->execute(array("趙 XX","海淀区","15801688348"));
?>

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

http://www.bkjia.com/PHPjc/915442.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/915442.html技術記事 PDO プリペアド ステートメント PDOStatement オブジェクトの使用法の概要、pdopdostatement PDO のプリペアド ステートメントのサポートには PDOStatement クラス オブジェクトの使用が必要ですが、このクラス オブジェクトは NEW キーワードによってインスタンス化されません...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHP対Python:違いを理解しますPHP対Python:違いを理解しますApr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:それは死にかけていますか、それとも単に適応していますか?PHP:それは死にかけていますか、それとも単に適応していますか?Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの未来:適応と革新PHPの未来:適応と革新Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?Apr 10, 2025 am 09:39 AM

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?Apr 10, 2025 am 09:38 AM

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。Apr 10, 2025 am 09:37 AM

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、ファイルを安全に処理する方法をどのように処理しますか?PHPは、ファイルを安全に処理する方法をどのように処理しますか?Apr 10, 2025 am 09:37 AM

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Apr 10, 2025 am 09:33 AM

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SublimeText3 中国語版

SublimeText3 中国語版

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