Mysql: スライスで `?`を使用する

作成日 2013年11月22日  ·  5コメント  ·  ソース: go-sql-driver/mysql

このような:
SELECT * FROM TABLE WHERE A IN(?)

クエリインターフェイスdb.Query(sSql、vArgs ...)を使用すると、パラを入力するのに役立ちますか?
このような文字列として: "a、b、c"?
または次のような配列として:[a、b、c]?
または次のようなスライスとして:["a"、 "b"、 "c"]?

それはすべて失敗しました、泣きます...

duplicate question working as intended

最も参考になるコメント

これは#107の複製です。

それはうまくいきません。

?は、ステートメントの準備後にステートメントの実行プランを変更するものと一致することはできません。
使用できない場合(不完全な場合があります)は次のとおりです。

  • 複数の値(スライス、マップなど) :arrow_backward:これはここでの間違いです
  • SQLキーワード
  • SQL識別子(スキーマ、テーブル、列の名前)
  • 並べ替え順序

クエリを書き直す必要があります。 常に3つの引数がある場合は、それを作成します
SELECT * FROM TABLE WHERE A IN (?, ?, ?)
そうでない場合は、スライス要素の数に応じてクエリを作成するか、別のアプローチを探す必要があります。

全てのコメント5件

これは#107の複製です。

それはうまくいきません。

?は、ステートメントの準備後にステートメントの実行プランを変更するものと一致することはできません。
使用できない場合(不完全な場合があります)は次のとおりです。

  • 複数の値(スライス、マップなど) :arrow_backward:これはここでの間違いです
  • SQLキーワード
  • SQL識別子(スキーマ、テーブル、列の名前)
  • 並べ替え順序

クエリを書き直す必要があります。 常に3つの引数がある場合は、それを作成します
SELECT * FROM TABLE WHERE A IN (?, ?, ?)
そうでない場合は、スライス要素の数に応じてクエリを作成するか、別のアプローチを探す必要があります。

こんにちはArnehormannはあなたの答えに感謝します、この「SELECT * FROM TABLE WHERE A IN(?、?、?)」のように使用する場合、私はパラの数を知る必要があります;しかし通常私はパラの数を知らないので次のような文字列入力パラで使用したい:SELECT * FROM TABLE WHERE A IN(?)、および文字列または[] stringextからのクエリ。

ありがとうございました
br foru。

@ zhaohui-私が何かを逃していない限り、ケビン。 個々の引数をQuery()渡すか、 s...スライスを展開する必要があるため、パラメータがいくつあるかを_常に_知っているので、その知識に基づいて正しい数のプレースホルダーを使用してクエリを作成しますhttp ://play.golang.org/p/mA2KwolV-n

これを読んで、あなたが今何をすべきかを知っているかどうかはわかりません。
パラメータの数が事前にわからない場合は、 ?使用できません。

だからあなたは次のようなことをする必要があります

if len(inValues) > 0 {
    query = "SELECT * FROM " + table + " WHERE " + column +
        " IN (?" + strings.Repeat(",?", len(inValues)-1)) + ")"
    ....
}

編集ありがとう@DisposaBoy 、それはかなりおなじみに見えます:+1:

私はこのように使用する方法を知っていますが、それは私の心ではありません:)とにかくどうもありがとう。

2013-11-22 19:06:15に、「ArneHormann」 [email protected]は次のように書いています。

これを読んで、あなたが今何をすべきかを知っているかどうかはわかりません。
事前にパラメータの数がわからない場合は、?を使用できません。

だからあなたは次のようなことをする必要があります

iflen(inValues)> 0 {query = "SELECT * FROM" + table + "WHERE" + column + "IN(?" + strings.Repeat( "、?"、len(inValues)-1))+ ")" .. ..}


このメールに直接返信するか、GitHubで表示してください。

このページは役に立ちましたか?
0 / 5 - 0 評価