前提・実現したいこと
Goでmysqlを操作しようとしています。
*sql.DB型の変数dbを用いて
db.Query(sql, bindValue)とすればプリペアードステートメントに変数を割り当てられ、この第二引数は可変長かつinterface{}でどの型も扱えるになっていることは確認できているのですが
このbindValueにスライスを代入した場合にはエラーになってしまいます。
in演算子を使用する場合の解決策やライブラリの提案はいくつか調べがついているのですが
アプリケーションの動作によってwhere文などが動的に変化し、かつ「?」が複数ある場合の対処については見つかりませんでした。
例としては
query := "where a = ?" if zyokenn_hogehoge != ""{ query += " and b = ?" }
(コードは適当ですが・・・)
このように and 以下がある時とない時がある場合です。
これに対して以下のようなスライスを定義し
bind := []string{"fuga", "hoge"}
バインドしたいのですが Goではこのようなことは不可能なんでしょうか?
先のスライスを使って
row, err := db.Query(sql, bind)
このように書くと以下のようなエラーが出ます。
sql: converting argument $1 type: unsupported type []string, a slice of string
Goでスライスなど可変長のデータのまとまりをつかってプレースホルダを埋め込む方法は存在するのでしょうか?
あるいは、これまで別の言語で同じような実装でアプリケーションを作っていたのですがこうした方法がアンチパターンなのでしょうか。
解決方法または代替案をご教授いただきたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/27 00:17