Вставка с несколькими параметрами дает SQLite3 :: RangeException - PullRequest
1 голос
/ 03 июня 2011

Я использую библиотеку Ruby Sqlite3 для вставки некоторых записей в базу данных.У меня проблемы с получением приведенных ниже утверждений (я перепробовал все опубликованные варианты);Я получаю исключение SQLite3::RangeException - bind or column index out of range:.

Запрос работает, если я просто жестко закодирую значения в нем ... так что я делаю неправильно?

  statement = db.prepare("insert into IntegrationLogin (Username, Password, ProjectID) values (\"?1\", \"?2\", 1)")
  statement.execute [params['username'], params['password']]

  statement = db.prepare("insert into IntegrationLogin (Username, Password, ProjectID) values (\"?1\", \"?2\", 1)")
  statement.execute params['username'], params['password']

  statement = db.prepare("insert into IntegrationLogin (Username, Password, ProjectID) values (\"?\", \"?\", 1)")
  statement.execute params['username'], params['password']

1 Ответ

2 голосов
/ 04 июня 2011

Я думаю, что ваша проблема заключается в попытке заключить в кавычки индикаторы параметров (?). Это не нужно, так как драйвер заключит строковый параметр в кавычки и выполнит любое дополнительное экранирование перед выполнением запроса. Когда я удалил кавычки, ваш пример запросов выполнялся нормально.

Похоже, что ваши лишние цитаты как-то экранируют индикаторы параметров, а драйвер их не видит.

Используйте это:

statement = db.prepare("insert into IntegrationLogin (Username, Password, ProjectID) values (?, ?, 1)")

Вы делали это сложнее, чем нужно было. Не волнуйтесь, этот тип привязки параметров полностью предотвращает внедрение SQL, даже без лишних кавычек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...