0

PHPでSQLite3を使用しています。

友人は、準備済みのステートメントを好むべきだと私に言いました。これは、ここ StackOverflow の多くの投稿でも読みました。次のような通常のエスケープよりもはるかに多くの行を記述する必要があるため、準備済みステートメントを使用する利点を理解したいと思います。

$db->exec("Insert INTO table VALUES(NULL,'".$db->escapeString($value)."')"

または使用:

foreach($_POST as $k => $v) {
    $_POST[$k] = $db->escapeString($v);
}

なぜ準備済みステートメントを使用する必要があるのですか? 長所と短所は何ですか?

4

2 に答える 2

2

パラメータをネイティブのプリペアド ステートメントと混同することがよくあります。Sqlite が後者をサポートしているとは思えませんが、それでもなお、常にパラメーターを使用してクエリ内の実際のデータを置き換える必要があります。

パラメーター (「プレースホルダー」とも呼ばれる) が処理されると、重要なことが起こります。

  • 必要なすべての書式設定 (つまり、エスケープ引用) が適用されます (エスケープは仕事の半分しか行わないため、クエリはインジェクションに対して広く開かれたままになります)。
  • このようなフォーマットは、ソース変数ではなく、クエリに送られるデータ自体に適用され、データを台無しにします (したがって、メールで送信したり、セッションに保存したりできます)。
  • このようなフォーマットは自動的に適用されるため、開発者の善意からあなたの安全を守ることができます。それは非常に重要な問題です
于 2013-03-19T11:33:02.753 に答える
1

プリペアド ステートメントは、主SQL injectionにハッカーや悪意のあるプログラムによる実行を回避するために使用されます。

于 2013-03-19T11:31:36.157 に答える