多くのユーザーがデータベースを操作するWebサイトのどこに(コード内で)プリペアドステートメントの要素を配置しますか?
$mysqli->escape_string
SQLインジェクションから保護するためのより良い方法だと人々が言うので、コードを使用からプリペアドステートメントの使用に変換しています。
単にすべてを削除し、次$mysqli->escape_string
のようにコードの他の部分を置き換えるだけですか?
$mysqli->query("update `users` set `email`='$newEmail' where `userid`={$_SESSION['userid']} limit 1");
これに置き換えられました:
$stmt = $mysqli->prepare("update `users` set `email`=? where `userid`=? limit 1");
$stmt->bind_param('si',$newEmail,$_SESSION['userid']);
$stmt->execute();
$stmt->close();
?
ステートメントテンプレートは一度だけ準備され、その後、さまざまなパラメーターで再利用できるため、準備されたステートメントの方が効率的であると言われています。しかし、上記のコード置換では、ユーザーが電子メールアドレスを更新するたびにテンプレートの準備が行われるのではないでしょうか。代わりに、サーバーの起動時にすべてのステートメントを準備する必要がありますか?そして、それらを再び準備しませんか?(私はそれを行う方法がわかりませんが。)どこにprepare
、bind_param
そしてclose
私のウェブサイトのコード全体に配置する必要がありますか?
すべての$ mysqli-> escape_stringsを削除し、変数をプレースホルダーに置き換えるだけですか?
はい。
ステートメントテンプレートは一度だけ準備され、その後、さまざまなパラメーターで再利用できるため、準備されたステートメントの方が効率的であると言われています。
気にしないで。リクエスト間でプリペアドステートメントを再利用する方法はありません。
これはステートメント変数内でのみ機能するため、単一のPHPインスタンス内でのみ適用できます。繰り返し挿入/更新する場合にのみ使用できることを意味します。そして、そこにさえ、利益は重要なものではありません。
これは、本当に便利な機能というよりは、マーケティングのトリックです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加