Я использую QSqlQuery :: prepare () и :: addBindValue () для своих запросов в проекте Qt, над которым я работаю. Там много повторяющегося кода, и хотя я думаю, что это «правильный» способ, я хотел убедиться. Возможно, у кого-то есть альтернативные идеи? Пример:
QSqlQuery newQuery;
newQuery.prepare("INSERT INTO table "
"(foo,bar,baz,"
"herp,derp,biggerp,"
"alpha,beta,gamma,"
"etc) VALUES "
"(?,?,?,"
"?,?,?,"
"?,?,?,"
"?)");
newQuery.addBindValue(this->ui->txtFoo->text());
newQuery.addBindValue(this->ui->txtBar->text());
newQuery.addBindValue(this->ui->txtBaz->text());
newQuery.addBindValue(this->ui->txtHerp->text());
newQuery.addBindValue(this->ui->txtDerp->text());
newQuery.addBindValue(this->ui->txtBiggerp->text());
newQuery.addBindValue(this->ui->txtAlpha->text());
newQuery.addBindValue(this->ui->txtBeta->text());
newQuery.addBindValue(this->ui->txtGamma->itemText(0));
newQuery.addBindValue(this->ui->txtEtc->text());
newQuery.exec();
Вы можете видеть, что есть куча одного и того же "newQuery.addBindValue (this-> ui -> __________") снова и снова. Это «лучший» способ сделать это?
Кроме того, я спросил в #qt на freenode прошлой ночью, но не получил окончательного ответа; будет ли вышеизложенное (:: подготовить с помощью :: addBindValue) защитить от внедрения SQL? Ссылка на самом деле не сказал.