Go SQL クエリでのテキストと値の連結
Go でテキスト SQL クエリを構築する場合、連結時に従うべき特定の構文ルールがあります。文字列と値のコンポーネント、特に整数を使用する場合。
提供された Python コードでは、タプルのアプローチは Go では無効であり、パラメーターを文字列としてキャストしようとすると、型の不一致エラーが発生します。
Go でこれを実現する慣用的な方法は、fmt.Sprintf を使用してクエリ文字列をフォーマットすることです。これにより、実行時に文字列内に値を埋め込むことができます:
<code class="go">query := fmt.Sprintf(`SELECT columnA FROM tableA WHERE columnB = %d AND columnB = %s`, someNumber, someString)</code>
ここで、プレースホルダー %d と %s はそれぞれ整数値と文字列値を表し、db.Query 呼び出し中に割り当てられます。
<code class="go">rows, err := db.Query(query, val1, val2)</code>
このアプローチにより、値が正しくフォーマットされ、SQL インジェクションの脆弱性が防止されます。
SQL インジェクションの回避
次の点に注意することが重要です。 SQL クエリ内の文字列連結はインジェクションの脆弱性を引き起こす可能性があります。このリスクを軽減するには、準備されたステートメントとパラメーター化されたクエリを使用します。値をパラメータとして渡すことで、悪意のある入力によって意図した SQL クエリが変更されるのを防ぐことができます。
例:
<code class="go">stmt, err := db.Prepare(`SELECT columnA FROM tableA WHERE columnB = ? AND columnB = ?`) rows, err := stmt.Query(val1, val2)</code>
プリペアド ステートメントを使用すると、悪意のある SQL 入力からアプリケーションを保護できます。動的クエリを構築する利便性を維持しながら。
以上がGo で SQL クエリを構築するときにテキストと値を安全に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。