Mysql: Использование `?` С фрагментами

Созданный на 22 нояб. 2013  ·  5Комментарии  ·  Источник: go-sql-driver/mysql

Как это:
ВЫБЕРИТЕ * ИЗ ТАБЛИЦЫ, ГДЕ А В (?)

когда я использую интерфейс запросов db.Query (sSql, vArgs ...), hwo для ввода пара?
в виде такой строки: "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 (?, ?, ?) .
Если нет, вам нужно создать запрос в зависимости от количества элементов среза или искать другой подход.

Привет, Арнехорманн, спасибо за ваш ответ, если вы используете такой вариант «ВЫБРАТЬ * ИЗ ТАБЛИЦЫ, ГДЕ А В (?,?,?)», Я должен знать, сколько параграфов; Но обычно я не знаю, сколько пара есть, так что Я хочу использовать в строковом вводе такой параметр: 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.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги