3

「database/sql」パッケージを使用して、Go で次のようなクエリを実行したいと思います。

SELECT id, name FROM users WHERE id IN (1,2,3,4);

クエリ コマンドで変数置換を使用するにはどうすればよいですか? たとえば、私はこれをやりたいです(もちろんうまくいきません):

db.Query("SELECT id, name FROM users WHERE id IN (?)", []int{1,2,3,4})
4

1 に答える 1

2

@Volker はコメントで、一部のデータベース ドライバーがスライスを拡張できる可能性があることを示唆しています。ただし、どのドライバーでもスライス要素を個別に処理できます。

db.Query("SELECT id, name FROM users WHERE id IN (?, ?, ?, ?)", 1, 2, 3, 4)

もちろん、それを記述するときには、スライスに含まれる要素の数を正確に知る必要がありますが、おそらくそうではありません。正しい数の疑問符を生成するのは簡単で、一般的な解決策が得られます。

ints := []interface{}{1,2,3,4}
marks := strings.Repeat("?,", len(ints) - 1) + "?"
db.Query("SELECT id, name FROM users WHERE id IN (" + marks + ")", ints...)

スライスが空である可能性がある場合は、何らかの方法でそれを処理する必要があります。

于 2013-05-19T07:56:28.540 に答える