| ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
プリペアドステートメントおよびストアドプロシージャより成熟したデータベースの多くは、プリペアドステートメントという 概念をサポートしています。プリペアドステートメントとはいったい何の ことでしょう? これは、実行したい SQL をコンパイルした 一種のテンプレートのようなものです。パラメータ変数を使用することで SQL をカスタマイズすることが可能です。プリペアドステートメントには 2 つの大きな利点があります。
プリペアドステートメントは非常に有用な機能なので、もしドライバが サポートしていなくても、例外的に PDO がこの機能をエミュレートします。 これにより、データベースの機能にかかわらず同じ仕組みで データベースへのアクセスができることが保証されます。
例1 プリペアドステートメントを使用して、繰り返し挿入処理を行う この例は、name および value を名前つきプレースホルダで置き換えて INSERT クエリを実行します。
<?php
例2 プリペアドステートメントを使用して、繰り返し挿入処理を行う この例は、name および value をプレースホルダ ? で置き換えて INSERT クエリを実行します。
<?php
例3 プリペアドステートメントを使用してデータを取得する この例では、フォームで入力したキーの値に応じたデータを取得します。 ユーザーの入力内容は自動的に引用符で括られるので、SQL インジェクション攻撃の 恐れはありません。
<?php
例4 出力パラメータを指定してストアドプロシージャをコールする データベースドライバがサポートしていれば、入力パラメータだけでなく 出力パラメータもバインドすることが可能です。出力パラメータは、 一般にストアドプロシージャから値を受け取るために使用します。この場合、 返される値の大きさがどの程度になるのかをバインド時に知っておく必要が あります。指定した大きさよりも大きな値が返されると、エラーが発生します。
<?php
例5 入出力パラメータを指定してストアドプロシージャをコールする 入出力の両方に使用するパラメータを指定することもできます。 このパラメータの書式は、出力パラメータと同じです。 次の例では、ストアドプロシージャに文字列 'hello' を渡しています。 プロシージャの結果が返ってくると、 この文字列はプロシージャの返す値に置き換えられます。
<?php
例6 プレースホルダの間違った使用法
<?php |
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「プリペアドステートメントおよびストアドプロシージャ」をGoogle検索
|