2016-04-20 2 views
1

Есть ли причина, по которой я должен использовать функцию sqlite3_bind_int()? Можно ли передавать целочисленные переменные перед выполнением функции Prepare?Должен ли я использовать функцию SQLite3 bind_int?

Пример А (псевдокод):

// prepare statement 
sstream s; 
s << "insert into TABLE values(" << 1 << "," << 2 << ",?)"; 
//... 
const char *sql = ... // sql is equal to "insert into TABLE values(1, 2, ?)"; 
Prepare(..., sql, ...); 
sqlite3_bind_text(3, "text") 

Пример B (псевдокод):

const char *sql = "insert into TABLE values(?, ?, ?)"; 
Prepare(..., sql, ...); 
sqlite3_bind_int(1, 1); 
sqlite3_bind_int(2, 2); 
sqlite3_bind_text(3, "text") 

Я понимаю, что текстовые переменные могут содержать строку SQL-инъекции, так что необходимо использовать bind_text функцию, но целые ?

+1

Нет, все не в порядке. У вас должен быть подготовленный оператор для привязки значений. Если у вас нет подготовленного заявления, это не сработает. –

+0

Я проверил это, и он работает. Я подготовил «вставить в значения TABLE (1, 2,?)» И вызвать Prepare(), а затем bind_text. Числа и были добавлены в таблицу. – Adam

ответ

2

Параметры привязки устраняют проблемы форматирования или атаки SQL-инъекций.

Однако ни одна из них не является проблемой для простых целых чисел. Итак, вам не нужно использовать sqlite3_bind_int, если вам остался другой код.

С другой стороны, вы определенно хотите использовать привязку для значений float/text/blob, поэтому вполне вероятно, что избежать sqlite3_bind_int просто делает код непоследовательным.

Смежные вопросы