Go でテキスト SQL クエリを作成する場合、文字列部分と値を連結するときに問題が発生する可能性があります。文字列内で %d および %s プレースホルダーを使用するなどの従来の方法では、構文エラーや型の不一致が発生する可能性があります。
Python スタイルの連結
Python では、三重引用符で囲まれた文字列内で % 演算子を使用して、文字列と値を連結できます。ただし、このアプローチは Go ではサポートされていません。
Go と同等
Go で同様の連結を実現するには、fmt.Sprintf 関数を使用できます。最初の引数として文字列形式を受け取り、プレースホルダーとして追加の引数を受け取ります。
<code class="go">query := fmt.Sprintf(`SELECT columnA FROM tableA WHERE columnB = %d AND columnC = %s`, someNumber, someString)</code>
インジェクション脆弱性の防止
値をクエリに連結する際、次のことを避けることが重要です。インジェクションの脆弱性。文字列内でプレースホルダーを使用する代わりに、準備されたステートメントを使用することを検討してください。
<code class="go">query := `SELECT columnA FROM tableA WHERE columnB = ? AND columnC = ?` rows, err := db.Query(query, val1, val2)</code>
ここで、?プレースホルダーは値を表し、val1 と val2 は引数として db.Query に渡されます。この方法によりクエリの安全性が確保され、悪意のある入力がデータベースに影響を与えるのを防ぎます。
以上がGo でテキスト SQL クエリを安全に構築するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。