亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

PHP MySQL 準(zhǔn)備済みステートメント

プリペアドステートメントは、MySQL インジェクションを防ぐのに非常に役立ちます。

SQL インジェクション は、Web フォームの送信に SQL コマンドを挿入したり、ページ リクエストのドメイン名やクエリ文字列を入力したりして、最終的にサーバーをだまして悪意のある SQL コマンドを?qū)g行させることです。


プリペアドステートメントとバインドパラメータ

プリペアドステートメントは、複數(shù)の同一の SQL ステートメントをより高い実行効率で実行するために使用されます。

準(zhǔn)備されたステートメントの動(dòng)作原理は次のとおりです:

1. 前処理: SQL ステートメントのテンプレートを作成し、データベースに送信します。予約された値にはパラメータ「?」が付けられます。例:

INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)

2. SQL ステートメント テンプレートでのデータベースの解析、コンパイル、クエリの最適化、および出力を行わない結(jié)果の保存。パラメータ値が異なる場(chǎng)合、アプリケーションはステートメントを複數(shù)回実行できます。

3. 実行: 最後に、アプリケーションにバインドされた値をパラメーター (「?」マーク) に渡すと、データベースがステートメントを?qū)g行します。

SQL ステートメントを直接実行する場(chǎng)合と比較して、プリペアド ステートメントには 2 つの主な利點(diǎn)があります

· プリプロセスされたステートメントにより、分析時(shí)間が大幅に短縮され、クエリが 1 つだけ作成されます (ただし、ステートメントは複數(shù)回実行されます)。

· パラメーターをバインドするとサーバーの帯域幅が削減され、ステートメント全體ではなくクエリのパラメーターのみを送信する必要があります。

· プリペアド ステートメントは、パラメーター値が送信された後にさまざまなプロトコルが使用され、データの合法性が保証されるため、SQL インジェクションに非常に役立ちます。


MySQLi プリペアド ステートメント

次の例では、MySQLi でプリペアド ステートメントを使用し、対応するパラメーターをバインドします。

<?php
 header("Content-type:text/html;charset=utf-8");    //設(shè)置編碼
 $servername = "localhost";
 $username = "root";
 $password = "root";
 $dbname = "test";
 
 // 創(chuàng)建連接
 $conn = new mysqli($servername, $username, $password, $dbname);
 
 // 檢測(cè)連接
 if ($conn->connect_error) {
     die("連接失敗: " . $conn->connect_error);
 }
 
 // 預(yù)處理及綁定
 $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)");
 $stmt->bind_param("sss", $firstname, $lastname, $email);
 
 // 設(shè)置參數(shù)并執(zhí)行
 $firstname = "John";
 $lastname = "Doe";
 $email = "john@example.com";
 $stmt->execute();
 
 $firstname = "Mary";
 $lastname = "Moe";
 $email = "mary@example.com";
 $stmt->execute();
 
 $firstname = "Julie";
 $lastname = "Dooley";
 $email = "julie@example.com";
 $stmt->execute();
 
 echo "新記錄插入成功";
 
 $stmt->close();
 $conn->close();
 ?>

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

"INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)"

SQL ステートメントでは疑問(wèn)符 (?) を使用します。ここで疑問(wèn)符を整數(shù)や文字列に置き換えることができます。 、double、およびブール値。

次に、bind_param() 関數(shù)を見てみましょう:

$stmt->bind_param("sss", $firstname, $lastname, $email);

この関數(shù)は SQL にバインドされていますパラメータを取得し、データベースにパラメータの値を伝えます。 「sss」パラメータ列は、殘りのパラメータのデータ型を処理します。上にはいくつかのデータ型があり、s 文字はデータベースにパラメータが文字列であることを示します。

パラメータには以下の4種類があります:

? i - integer (整數(shù)型)

? d - double (倍精度浮動(dòng)小數(shù)點(diǎn)型)

? s - string (文字列)

? b - BLOB (バイナリ ラージ オブジェクト) :Binary Large Object)

各パラメータには型を指定する必要があります。

データ型の指定方法は前のセクションで紹介しました

データベースパラメータのデータ型を伝えることで、SQLインジェクションのリスクを軽減できます。

上記のコードの実行結(jié)果:

新しいレコードが正常に挿入されました

データが正常に挿入されたかどうか確認(rèn)しますか?


フォーム內(nèi)のデータをデータベースに挿入しましょう

まず、HTMLページ

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>PHP中文網(wǎng)</title>
 </head>
 <body>
 
 <form action="insert.php" method="post">
     Firstname: <input type="text" name="firstname" /><br/>
     Lastname: <input type="text" name="lastname" /><br/>
     email: <input type="text" name="email" /><br/>
     <input type="submit" />
 </form>
 </body>
 </html>

それをPHPページに送信します

<?php
 header("Content-type:text/html;charset=utf-8");    //設(shè)置編碼
 $servername = "localhost";
 $username = "root";
 $password = "root";
 $dbname = "test";
 
 // 創(chuàng)建連接
 $conn = new mysqli($servername, $username, $password, $dbname);
 
 // 檢測(cè)連接
 if ($conn->connect_error) {
     die("連接失敗: " . $conn->connect_error);
 }
 
 // 預(yù)處理及綁定
 $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)");
 $stmt->bind_param("sss", $firstname, $lastname, $email);
 
 // 設(shè)置參數(shù)并執(zhí)行
 $firstname = $_POST['firstname'];
 $lastname =$_POST['lastname'];
 $email = $_POST['email'];
 $stmt->execute();
 
 echo "新記錄插入成功";
 
 $stmt->close();
 $conn->close();
 ?>

上記の2つの手順を通じて、次のことができますフォームのデータをデータベースに挿入します データがデータベースに挿入されました


學(xué)び続ける
||
<?php header("Content-type:text/html;charset=utf-8"); //設(shè)置編碼 $servername = "localhost"; $username = "root"; $password = "root"; $dbname = "test"; // 創(chuàng)建連接 $conn = new mysqli($servername, $username, $password, $dbname); // 檢測(cè)連接 if ($conn->connect_error) { die("連接失敗: " . $conn->connect_error); } // 預(yù)處理及綁定 $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)"); $stmt->bind_param("sss", $firstname, $lastname, $email); // 設(shè)置參數(shù)并執(zhí)行 $firstname = "John"; $lastname = "Doe"; $email = "john@example.com"; $stmt->execute(); $firstname = "Mary"; $lastname = "Moe"; $email = "mary@example.com"; $stmt->execute(); $firstname = "Julie"; $lastname = "Dooley"; $email = "julie@example.com"; $stmt->execute(); echo "新記錄插入成功"; $stmt->close(); $conn->close(); ?>
提出するリセットコード
  • おすすめコース
  • コースウェアのダウンロード
現(xiàn)時(shí)點(diǎn)ではコースウェアはダウンロードできません?,F(xiàn)在スタッフが整理中です。今後もこのコースにもっと注目してください?