前処理ステートメントを通じて、SQLステートメントの構造とデータは分離され、悪意のあるユーザーインジェクションのリスクを回避します。
実行効率を改善<BR> 繰り返し実行されたステートメントの場合、データベースサーバーはパフォーマンスを改善するためにSQL構造を一度解析するだけで済みます。
クリアコード構造<br> パラメーターバインディングにより、コードの読み取りが容易になり、スプライシング文字列の複雑さが軽減されます。
標準の使用例は次のとおりです。
<code> <?php // 1。データベースに接続$ mysqli = new mysqli( "gitbox.net"、 "username"、 "password"、 "database"); //接続を確認します
if($ mysqli-> connect_errno){
die( "接続失敗:"。$ mysqli-> connect_error);
}
//2。SQLステートメントを準備します
$ sql = "ユーザーに挿入(ユーザー名、電子メール、年齢)値(?、?、?)";
$ stmt = $ mysqli-> prepare($ sql);
if(!$ stmt){
die( "前処理が失敗した:"。$ mysqli-> error);
}
//3。バインドパラメーター
//「SSI」はパラメータータイプを表し、sは文字列を表し、整数を表します
$ username = "Alice";
$ email = " [email protected] ";
$ age = 25;
$ stmt-> bind_param( "ssi"、$ username、$ email、$ age);
// 4。ステートメントを実行します
if($ stmt-> execute()){
エコー「挿入に正常に、IDはIS:」です。 $ stmt-> insert_id;
} それ以外 {
エコー「実行に失敗した:」。 $ stmt-> error;
}
// 5。声明と接続を閉じる
$ stmt-> close();
$ mysqli-> close();
?>
</code>
新しいmysqli(ホスト、ユーザー、パス、dbname)を使用して、データベースに接続します。
生産環境では、DIE()の代わりに例外処理またはエラーログを使用することをお勧めします。
疑問符を使用しますか? SQLステートメントのパラメータープレースホルダーとして。
prepare()がfalseを返す場合、構文エラーまたは接続例外を意味します。
変数をステートメントの引数に結合します。
パラメータータイプは文字列で表され、一般的なタイプは次のとおりです。
s文字列(文字列)
私は整数です
Dダブル精度(ダブル)
bバイナリ(blob)
変数は参照パスである必要があり、実行前に割り当てる必要があります。
$ stmt-> execute()を呼び出して、プリプロセシングステートメントを実行します。
返された結果に基づいて実行が成功するかどうかを判断します。
プリプロセシングステートメントを閉じて$ stmt-> close()を閉じて、サーバーリソースを解放します。
データベース接続を閉じます$ mysqli-> close() 。
パラメータータイプは正しく一致する必要があります<br> パラメータータイプが誤っていると、データ挿入障害またはデータ型変換エラーが発生する場合があります。
バウンド変数は、実行前に割り当てる必要があります<br> それ以外の場合、nullまたは誤った値を挿入できます。
例外処理とエラーログ<br> die()を直接使用することはお勧めしません。例外メカニズムを使用してエラーをキャッチして、プログラムの堅牢性を確保できます。
バッチ挿入<br> バッチインサートが必要な場合は、ループバインディングパラメーターと実行を使用できますが、トランザクションを有効にして原子性を確保することをお勧めします。
一貫性をエンコードする文字<br> データベースとPHPスクリプトの文字エンコードが一貫していることを確認し、コードを避けてください。
INSERT_IDは注意を得ます<br> $ STMT-> INSERT_IDを使用して自動インクリメントプライマリキーを取得する場合、テーブルに自動挿入列があることを確認してください。