в запрос в маркеры «?». В базу так и улетает со знаками вопросов.
Пример запроса к базе
rows, err := s.db.Query(
"SELECT * "+
"FROM `strategies_stats` "+
"WHERE `name` = \"?\" "+
"AND `signal_description` = \"?\" "+
"AND `signal_details` = \"?\" "+
"AND `market_code` = \"?\" "+
"AND `symbol_code` = \"?\" "+
"AND `data` >= \"? 00:00:00\" "+
"AND `data` <= \"? 00:00:00\" ",
name,
signalDescription,
signalDetails,
marketCode,
symbolCode,
startDay,
endDay,
)
При этом если я этот же запрос формирую в строку через fmt.Sprintf передаю его в метод без параметров, то все нормально отрабатывает.
А s.db это что?
*sql.DB
Какая бд/драйвер? Postgres/ pq?
Это может влияет? Я думал формируется на уровне go
нет весь смысл что параметры идут отдельно от запроса на сервер
Ага, я это уже понял. Я просто протестировал через Sprintf, может в запросе ошибка была. Значит что то глубже не работает.
Нет, драйвер формирует запрос и раскрывает плейсхолдеры. Драйвер должен быть импортирован, а еще sql.Open должен быть с параметром mysql - это все так?
Чуть выше я спрашивал, что за драйвер, осталось без ответа)
_ "github.com/go-sql-driver/mysql"
Годно, последняя моя идея это убрать кавычки вокруг ? в запросе. Они просто не нужны, но может это причина.
Кстати, на странице репоза, где этот метод нужно тоже подрубить это - _ "github.com/go-sql-driver/mysql»?
кавычки это от отчаинья)) вначале было без них))
попробывал с переред?
Пока нет, но если так не выйдет, обязательно попробую. Спасибо
Пакет единожды импортируется все равно, он должен быть хоть гдето до выполнения запроса импортирован
Возьмите jmoiron/sqlx - будет проще намного. А так - https://golang.org/doc/database/prepared-statements
В примерах их нет. По идее при раскрытии плейсхолдера драйвер сам добавит, если это строка.
пришли любители золотых пуль
Как это поможет с раскрытием плейсхолдеров, если драйвер там тот же, просто небольшая обертка?
да, тоже в доках смотрел, что нет.
Нет, нормальный драйвер не обрабатывает плейсхолдеры
не, требование использовать по максимуму родное, без сторонних пакетов.
а стандартный query работает с плейсхолдерами без пререпед? работал с mysql в далекой придалекой галактике давным давно :)
тогда странно
вот человек запрос кинул - хрена с два типо
В базу и должно улетать со знаками вопроса
судя по доке этого конкретного драйвера, может быть и так и так. Зависит от настройки.
Да, но любой нормальный драйвер не пытается это делать
Вот, Антон прям в точку попал
а какой кстати нормальный? Вот тот, что репортер проблемы привел, вроде бы достаточно популярный. https://github.com/go-sql-driver/mysql
Всё так, но это делает не драйвер, а сам MySQL
Обсуждают сегодня