Как это:
ВЫБЕРИТЕ * ИЗ ТАБЛИЦЫ, ГДЕ А В (?)
когда я использую интерфейс запросов db.Query (sSql, vArgs ...), hwo для ввода пара?
в виде такой строки: "a, b, c"?
или в виде такого массива: [a, b, c]?
или в виде такого среза: ["a", "b", "c"]?
вот и все не получилось, плачь ...
Это дубликат № 107.
Это не сработает.
?
не может соответствовать чему-либо, изменяющему план выполнения оператора после его подготовки.
Вот случай, для которого он не может быть использован (может быть неполным):
Вам придется переписать свой запрос. Если у вас всегда есть 3 аргумента, сделайте это
SELECT * FROM TABLE WHERE A IN (?, ?, ?)
.
Если нет, вам нужно создать запрос в зависимости от количества элементов среза или искать другой подход.
Привет, Арнехорманн, спасибо за ваш ответ, если вы используете такой вариант «ВЫБРАТЬ * ИЗ ТАБЛИЦЫ, ГДЕ А В (?,?,?)», Я должен знать, сколько параграфов; Но обычно я не знаю, сколько пара есть, так что Я хочу использовать в строковом вводе такой параметр: SELECT * FROM TABLE WHERE A IN (?) и запрос из строки или [] строки ext.
Спасибо
br для вас.
@ zhaohui-kevin, если я чего-то не упускаю. Вы _всегда_ знаете, сколько существует параметров, потому что вам нужно либо передать отдельные аргументы в 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)) + ")"
....
}
EDIT Спасибо @DisposaBoy, что выглядит довольно знакомым: +1:
Я знаю, как этим пользоваться, но это не мое мнение :) В любом случае, большое спасибо.
В 2013-11-22 19:06:15 "Арне Хорманн" [email protected] написал:
Прочитав это, я не уверен, знаете ли вы, что делать сейчас или нет.
Если заранее не знать количество параметров, нельзя использовать?.
Итак, вам нужно сделать что-то вроде
iflen (inValues)> 0 {query = "SELECT * FROM" + table + "WHERE" + column + "IN (?" + strings.Repeat (",?", len (inValues) -1)) + ")" .. ..}
-
Ответьте на это письмо напрямую или просмотрите его на GitHub.
Самый полезный комментарий
Это дубликат № 107.
Это не сработает.
?
не может соответствовать чему-либо, изменяющему план выполнения оператора после его подготовки.Вот случай, для которого он не может быть использован (может быть неполным):
Вам придется переписать свой запрос. Если у вас всегда есть 3 аргумента, сделайте это
SELECT * FROM TABLE WHERE A IN (?, ?, ?)
.Если нет, вам нужно создать запрос в зависимости от количества элементов среза или искать другой подход.