Если вы используете sqlite (конечно, выглядит так), вам не нужно делать замену строки самостоятельно. Вместо этого используйте sqlite3_bind_*
.
документация для связывания
Использование API от вашего провайдера базы данных дает много преимуществ, поэтому вам не следует избегать их, если вы можете помочь. Вы получите лучшую безопасность при печати, лучшую защиту от инъекций и улучшенную производительность.
В противном случае я бы использовал для этого boost::format
.
std::string sql = "insert into Norm1Tab values ('%1%','%2%');";
boost::format fmt(sql);
std::string stmt = boost::str( fmt % param1 % param2 );
Как уже упоминалось другими, вам нужно очистить свои параметры, чтобы убедиться в отсутствии уязвимостей для инъекций.
Если вы этого не сделаете, все, что имеет специальные символы, может сломать это.
char const* param1 = "Joe's House";
Потребовалось бы некоторое знание структуры, чтобы разрушить ее. Как только кто-то увидит сообщение об ошибке от Joe's House
, он, вероятно, узнает, что может сделать хуже.
char const* param1 = "'); DROP Norm1Tab; --";
Если вы будете делать это последовательно, умный человек получит полную схему только в течение времени. Например, с помощью sqlite любая инъекция в запрос может дать вам всю информацию, необходимую для тихого изменения ваших записей любым желаемым способом.
SELECT * FROM sqlite_master;