ホームページ >Java >&#&チュートリアル >MySQL のプリペアド ステートメントは動的に指定されたカラム名を処理できますか?

MySQL のプリペアド ステートメントは動的に指定されたカラム名を処理できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-21 05:07:13182ブラウズ

Can Prepared Statements in MySQL Handle Dynamically Specified Column Names?

準備されたステートメントの変数列名

問題:

準備されたステートメントを使用した行の選択、これを使用して返された列名を指定できますかMethod?

コンテキスト:

MySQL と Java を使用して、プリペアド ステートメントにパラメータとしてカラム名を含めようとすると、カラム名がリテラルとして組み込まれます。実際の列としてではなく、クエリ内の文字列names.

説明:

プリペアド ステートメントは、クエリ文字列に直接挿入せずにパラメータを指定できるようにすることで、SQL インジェクションを防ぐように設計されています。ただし、このメカニズムはパラメータ値を目的としたものであり、クエリ自体を変更するためのものではありません。

回避策:

1.データベース設計の再検討:

列名をユーザーに直接公開しないようにします。代わりに、データベースに別の列を作成して、データと一緒に目的の列名を保存するなど、別のメカニズムの使用を検討してください。

2.手動クエリ構築:

データベース設計の変更が不可能な場合は、入力列名をサニタイズして SQL クエリを手動で構築できます。 String#replace() メソッドを使用して、列名内の引用文字のインスタンスをエスケープします。

結論:

返される列を指定することはできません。プリペアドステートメントのパラメータとして名前を使用するには、目的の機能を実現する別のアプローチがあります。 SQL インジェクションの脆弱性を防ぐために、入力を適切にサニタイズしてください。

以上がMySQL のプリペアド ステートメントは動的に指定されたカラム名を処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。