Ваш исходный код, вероятно, производит это
INSERT or IGNORE INTO preodds ("id","handicap","goal line","corner line")
VALUES (:id,:handicap,:goal line,:corner line)
Обратите внимание на пробелы в именах параметров ... имена, начинающиеся с двоеточия (:
). Вот в чем проблема.
Ваша попытка - просто передать строковые литералы в виде значений, так что это именно то, что вставлено.
INSERT or IGNORE INTO preodds ("id","handicap","goal line","corner line")
VALUES (":id",":handicap",":goal line",":corner line")
Кавычки могут использоваться для разграничения имен объектов, но в других контекстах кавычки интерпретируются как литералы строковых значений . Точные правила для определения того, как он интерпретирует указанные значения, найдены здесь .
Насколько я могу судить, параметры не могут быть экранированы и поэтому не могут содержать пробелы или другие специальные символы, по крайней мере, ничего, чтозадокументировано. См. sqlite docs .
Если вы собираетесь создавать список параметров динамически, вы должны удалить все пробелы из имен параметров. Или же вы можете просто использовать неназванные параметры, используя символ ?
. В любом случае параметрам присваиваются значения в порядке их появления, поэтому разницы не будет.
Что-то вроде:
INSERT or IGNORE INTO preodds ("id","handicap","goal line","corner line")
VALUES (:id,:handicap,:goalline,:cornerline)
или
INSERT or IGNORE INTO preodds ("id","handicap","goal line","corner line")
VALUES (?, ?, ?, ?)