Latest web development tutorials
×

PHP コース

PHP コース PHP 簡単な紹介 PHP インストール PHP 文法 PHP 変数 PHP echo/print PHP データの種類 PHP 定数 PHP 文字列 PHP 演算子 PHP If...Else PHP Switch PHP 配列 PHP 配列のソート PHP スーパーグローバル PHP While 循環 PHP For 循環 PHP 関数 PHP マジック変数 PHP 名前空間 PHP オブジェクト指向の

PHP フォーム

PHP フォーム PHP フォーム認証 PHP フォーム - 必要なフィールド PHP フォーム - 確認メールおよびURL PHP 完全なフォームインスタンス PHP $_GET 変数 PHP $_POST 変数

PHP 応用チュートリアル

PHP 多次元配列 PHP 日付 PHP 含みます PHP ファイル PHP ファイルのアップロード PHP Cookie PHP Session PHP E-mail PHP セキュリティ E-mail PHP Error PHP Exception PHP フィルタ PHP 高度なフィルタ PHP JSON

PHP 7 新機能

PHP 7 新機能

PHP データベース

PHP MySQL 簡単な紹介 PHP MySQL 接続 PHP MySQL データベースの作成 PHP MySQL データテーブルを作成します。 PHP MySQL データを挿入 PHP MySQL 複数のデータの挿入 PHP MySQL プリペアドステートメント PHP MySQL データを読みます PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX 簡単な紹介 AJAX PHP AJAX データベース AJAX XML AJAX 実時間探索 AJAX RSS Reader AJAX 投票

PHP リファレンスマニュアル

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP 画像処理 PHP RESTful

PHPのPDOは、ステートメントおよびストアドプロシージャを用意しました

PHPのPDOリファレンスマニュアル PHPのPDOリファレンスマニュアル

多くのより成熟したデータベースは、準備文の概念をサポートしています。

プリペアドステートメントは何ですか? 可変パラメータを使用してカスタマイズすることができますが、SQLを実行したいコンパイル済みのテンプレート、と考えてください。 プリペアドステートメントは、2つの主要な利点があります。

  • クエリは、解決さ(又は前処理)を1回、同じまたは異なるパラメータで複数回実行することができます。 クエリの準備が整うと、データベースは、クエリの最適化計画を、分析コンパイルして実行します。 あなたは異なるパラメータ同じクエリで何度も繰り返す必要があれば、複雑なクエリの場合、このプロセスは、長い時間がかかり、処理が大幅にアプリケーションの速度が低下します。 プリペアドステートメントを使用して/最適化サイクルをコンパイル/分析の繰り返しを避けます。 要するに、プリペアドステートメントは、少ないリソースを使用するので、高速に動作します。
  • プリペアドステートメントにパラメータを提供し、引用符を使用する必要はありません、ドライバが自動的に処理されます。 アプリケーションは唯一のプリペアドステートメントを使用している場合、我々はありませんSQLインジェクションことを確認することができます。 (クエリの他の部分を構築するために、入力からエスケープされていない場合は、その後、SQLインジェクションのリスクが依然として存在します)。

ドライバーはPDOをサポートしていないとき、彼らは唯一の機能は、アナログ処理であることをとても便利な準備された文。 これは関係なく、データベースの機能を有しているかどうかの、あなたはアプリケーションが同じデータ・アクセス・パターンを使用することができることを確実にすることができるようになります。

PreparedStatementでは繰り返し挿入

INSERTクエリを実行するための名前と値を持つ適切な名前のプレースホルダを置き換えることによって、次の例

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

// 插入一行
$name = 'one';
$value = 1;
$stmt->execute();

//  用不同的值插入另一行
$name = 'two';
$value = 2;
$stmt->execute();
?>

PreparedStatementでは繰り返し挿入

名前と値を代入?プレースホルダを挿入クエリを実行することによって、次の例。

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// 插入一行
$name = 'one';
$value = 1;
$stmt->execute();

// 用不同的值插入另一行
$name = 'two';
$value = 2;
$stmt->execute();
?>

準備されたステートメントを使用してデータを取得します

既に提供されたデータへの鍵ベースのアクセスの形で、次の例。 ユーザ入力は、自動的に引用符で囲まれているので、SQLインジェクション攻撃の危険性はありません。

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>

データベースドライバサポートする場合、アプリケーションは、入力および出力パラメータ出力パラメータは、典型的には、ストアドプロシージャから値を得るために使用される結合することができます。 出力パラメータをバインドするとき、あなたが与えられた長さのパラメータを知る必要があるため、出力パラメータは、もう少し複雑であることが入力パラメータよりも使用するように。 パラメータの値が長さの結合勧告よりも大きい場合、それはエラーが発生します。

出力パラメータを持つストアドプロシージャをコールします

<?php
$stmt = $dbh->prepare("CALL sp_returns_string(?)");
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000); 

// 调用存储过程
$stmt->execute();

print "procedure returned $return_value\n";
?>

また、構文は、出力パラメータに似て、パラメータの入力と出力の両方の値を指定することができます。 ストアドプロシージャのリターンは、ハローは、ストアドプロシージャの戻り値に置き換えられたときに次の例では、 "hello"という文字列がストアドプロシージャに渡されます。

入力/出力パラメータは、ストアドプロシージャを呼び出すと

<?php
$stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");
$value = 'hello';
$stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 

// 调用存储过程
$stmt->execute();

print "procedure returned $value\n";
?>

プレースホルダの使用が無効です。

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");
$stmt->execute(array($_GET['name']));

// 占位符必须被用在整个值的位置
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->execute(array("%$_GET[name]%"));
?>

PHPのPDOリファレンスマニュアル PHPのPDOリファレンスマニュアル