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 MySQLはステートメントを準備しました

MySQLの注入を防止するために準備されたステートメントは非常に便利です。


プリペアドステートメントおよびバインドされたパラメータ

同じSQL文の複数を実行するための準備された文、およびより効率的に実行します。

プリペアドステートメントの作品次のように:

  1. 前処理:データベースに送信されたテンプレートSQL文を作成します。 予約パラメータの値「?」マーク。 例えば:

    INSERT 
    	INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
  2. データベースの分析、SQL文のテンプレートクエリの最適化を実行し、コンパイルし、結果が出力されません格納されます。

  3. 実行:最後に、(「?」マーク)を結合アプリケーションに渡されたパラメータの値は、データベースが文を実行します。 パラメータ値が同じでない場合のアプリケーションは、何度も実行することができます。

SQL文を直接実行と比較して、準備された文は、2つの主な利点があります。

  • (文が実行されているが)準備された文は劇的にだけクエリ、分析時間を短縮します。

  • サーバーの帯域幅を削減するためのパラメータを結合した、あなただけの代わりに、文全体のパラメータクエリを送信する必要があります。

  • 後のデータの正当性を保証するために、パラメータ値を送信するために、異なるプロトコルを使用しているため、SQLインジェクションに対するプリペアドステートメントは、非常に便利です。


MySQLiをステートメントを準備しました

次の例では、準備されたステートメントでMySQLiのを使用し、対応するパラメータをバインドします。

例(プリペアドステートメントを使用して、MySQLiを)

<?PHPの
$サーバー名= "localhost"を。
$ユーザ名= "ユーザ名";
$パスワード= "パスワード";
$ DBNAME = "MYDB」。

//接続を作成します。
$コン=新しいmysqliの($のサーバー名、$ユーザ名、$パスワード、$ dbnameは);

//接続のテスト
場合($ conn-> connect_error){
死ぬ( "接続に失敗しました:"。$ conn-> connect_errorを)。
}

//前処理および結合
$のstmt = $ conn->( "?(MyGuests(ファーストネーム、姓、電子メール)VALUES。INSERT INTO ,,)??")を調製。
$ Stmt-> bind_param( "SSS"、$のFIRSTNAME、$の姓、$メール)。

//パラメータを設定し、実行します
$ファーストネーム= "ジョン"。
$姓= "ドウ";
$メール= "[email protected]";
$ Stmt->実行();

$ファーストネーム= "メアリー"。
$姓= "萌え";
$メール= "[email protected]";
$ Stmt->実行();

$ファーストネーム= "ジュリー";
$姓=「ドゥーリー」。
$メール= "[email protected]";
$ Stmt->実行();

「新しいレコードが正常に挿入されている "エコー;

$ Stmt->クローズ();
$ Conn->クローズ();
?>

次の例のコードの各行を解析します:

「(?、?、?)MyGuests(ファーストネーム、姓、電子メール)VALUES。INSERT INTO "

SQL文では、我々は疑問符(?)を使用し、ここでは、疑問符の整数、文字列、倍精度浮動小数点、およびブール値を置き換えることができます。

次に、私たちはbind_paramで()関数を見てみましょう:

$ Stmt-> bind_param( "SSS"、$のFIRSTNAME、$の姓、$メール)。

機能バインドSQLパラメーター、およびデータベース・パラメータの値を教えてください。 残りのパラメータは、「Sssを「カラム処理パラメータのデータ型。 sの文字は、データベースパラメータ文字列を指示します。

パラメータの4つのタイプがあります。

  • 私 - 整数(整数)
  • D - ダブル(倍精度浮動小数点)
  • S - 文字列(文字列)
  • B - BLOB(バイナリラージオブジェクト:バイナリラージオブジェクト)

各パラメータは、タイプを指定する必要があります。

データ型のパラメータを使用すると、SQLインジェクションのリスクを減らすことができ、データベースに指示します。

ノート 注:追加データ(ユーザー入力)を挿入したい場合は、データの検証が非常に重要です。


PDOは、内のステートメントを準備しました

次の例では、我々はPDOと結合パラメータでプリペアドステートメントを使用します。

例(PDO準備されたステートメントを使用して)

<?PHPの
$サーバー名= "localhost"を。
$ユーザ名= "ユーザ名";
$パスワード= "パスワード";
$ DBNAME = "myDBPDO";

{しよう
$コン=新しいPDO( "mysqlの:ホスト= $サーバー名; dbnameに= $ dbnameに"、$ユーザ名、$パスワード);
// PDOエラーモードの例外を設定します
$ Conn->のsetAttribute(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION)。

//前処理およびSQLバインドパラメータ
$のstmt = $ conn->準備( "(MyGuests。INSERT INTOファーストネーム、姓、電子メール)
VALUES(:FIRSTNAME ,:姓,:メール) ");
$ Stmt-> bindParam( ':FIRSTNAME'、$のFIRSTNAME)。
$ Stmt-> bindParam( ':LASTNAME'、$の姓);
$ Stmt-> bindParam( ':メール'、$メール)。

//行の挿入
$ファーストネーム= "ジョン"。
$姓= "ドウ";
$メール= "[email protected]";
$ Stmt->実行();

//別の行を挿入します
$ファーストネーム= "メアリー"。
$姓= "萌え";
$メール= "[email protected]";
$ Stmt->実行();

//別の行を挿入します
$ファーストネーム= "ジュリー";
$姓=「ドゥーリー」。
$メール= "[email protected]";
$ Stmt->実行();

「新しいレコードが正常に挿入されている "エコー;
}
キャッチ(PDOExceptionます$ e)の
{
..エコー$ sqlを「<BR> "は$ e-> getMessage()の;
}
$コン= nullを。
?>