Go で SQL クエリを効果的に作成する
テキスト SQL クエリ内の文字列と値を連結するのは、Go では少し難しい場合があります。 Python とは異なり、Go の文字列フォーマット構文は動作が異なるため、ここで発生したような一般的なエラーが発生します。
タプル構文エラー
最初のコード スニペットは Python を使用しようとしています-style タプル。Go ではサポートされていません。これにより、構文エラーが発生します:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %d`, (val1, val2))</code>
型が一致しません
タプル要素を文字列としてキャストしようとしても、型の不一致により失敗します:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %d`, val1, val2)</code>
演算子の不一致を避ける
パラメータを文字列としてキャストし、演算子 %s と連結すると機能しますが、お勧めしません。このアプローチでは、演算子の不一致のリスクが生じます。
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %s AND column2_name = %s`, strconv.Itoa(val1), val2)</code>
Go のソリューション
Go で値の連結を含むテキスト SQL クエリを正しく記述するには、fmt.Sprintf を使用します。次のとおりです:
<code class="go">query := fmt.Sprintf(`SELECT column_name FROM table_name WHERE column1_name = %d AND column2_name = %s`, val1, val2)</code>
この構文は、インジェクションの脆弱性を回避し、適切な型変換を保証します。
インジェクションの防止
SQL インジェクション攻撃を防ぐには、常に準備されたステートメントを使用するか、ユーザー指定の入力にエスケープ文字を提供します。
以上がGo を使用して SQL クエリで文字列と値を効果的に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。