PHP防止sql注入小技巧のsql前処理
2048 ワード
sqlの前処理は、変数パラメータを使用してカスタマイズできる、実行したいSQLのコンパイルされたテンプレートと見なすことができます.
どのようなメリットがあるか見てみましょう.前処理文は分析時間を大幅に短縮し、1回のクエリーのみを行いました(文は複数回実行されますが). バインドパラメータはサーバ帯域幅を減少させ、文全体ではなくクエリーのパラメータを送信するだけです. 前処理文は、パラメータ値が送信された後に異なるプロトコルが使用され、データの正当性が保証されるため、SQL注入に非常に有用である.
このような前処理は、2つの方法で、私たちが今回言うのはmysqliです.いつでも、PDOよりもアプリケーションが同じデータ・アクセス・モードで使用できることを保証します.
前処理では、dml文とdql文の2つの文があります.まず最初の方法を見てみましょう.
2つ目は、コードは次のとおりです.
次に、この2つの文がそれぞれどのようなsqlをサポートしているかを見てみましょう.
1つ目はinsert、update、deleteの3種類のsqlをサポートし、2つ目はクエリー文です.
終わったbind_paramのiは、私たちがパラメータを入力するタイプです.具体的には以下のように紹介します. i-integer(整数) d-double(デュアル精度浮動小数点型) s-string(文字列) b-BLOB(binary large object:バイナリオブジェクト) 各パラメータにクラスを指定する必要があります.これにより、データベース・パラメータのデータ型を教えることで、SQL注入のリスクを低減できます.
はい、今回の記録はここまでです.
いい感じだったら、応援よろしくね..
どのようなメリットがあるか見てみましょう.
このような前処理は、2つの方法で、私たちが今回言うのはmysqliです.いつでも、PDOよりもアプリケーションが同じデータ・アクセス・モードで使用できることを保証します.
前処理では、dml文とdql文の2つの文があります.まず最初の方法を見てみましょう.
query('set names utf8');
$insert = $mysqli->prepare("insert admins (title,cookies,sta,lid) values (?,?,?,?)");
$title = "cuijinpeng";
$cookies = "luyaran201314";
$sta = "1";
$lid = 1;
$insert->bind_param("sssi",$title,$cookies,$sta,$lid);
$res = $insert->execute();
if($res){
echo 1;
}else{
echo $insert->error;
echo 0;
}
$insert->close();
$mysqli->close();
2つ目は、コードは次のとおりです.
query('set names utf8');
$select = $mysqli->prepare("select id,title,cookies,sta,lid from admins where id > ?");
$id = "1";
$select->bind_param("i",$id);
$select->bind_result($id,$title,$cookies,$sta,$lid);
$select->execute();
while ($select->fetch()) {
echo $id."---".$title."---".$cookies."---".$sta."---".$lid."
";
}
$select->close();
$mysqli->close();
次に、この2つの文がそれぞれどのようなsqlをサポートしているかを見てみましょう.
1つ目はinsert、update、deleteの3種類のsqlをサポートし、2つ目はクエリー文です.
終わったbind_paramのiは、私たちがパラメータを入力するタイプです.具体的には以下のように紹介します.
はい、今回の記録はここまでです.
いい感じだったら、応援よろしくね..