1

我正在尝试SQLite在 Delphi 的表中插入整数值。
表中emp usergroup_id为整数,label,description为字符串数据类型。
我的代码如下:

var
  gid: Integer;
  sdescription,ldescription: String;
begin
  sdescription := RzEdit1.Text;
  ldescription := RzMemo1.Text;
  gid := Integer(RzComboBox1.Items.Objects[RzComboBox1.Items.IndexOf(gname)]);

  try
    SQLConnection1.Connected := true;
    SQLMonitor1.Active := True;
    sSql := 'INSERT INTO emp(usergroup_id, label, description) VALUES (gid,''' + sdescription + ''',''' + ldescription + ''' )';
    SQLConnection1.ExecuteDirect(sSql);

  except
    on E: EDatabaseError do
      ShowMessage('Exception raised with message' + E.Message);
  end;
end;

它给了我一个错误,因为Unknown column gid.
当我尝试使用固定整数值而不是变量进行类似操作时,它可以工作:

sSql := 'INSERT INTO emp(usergroup_id, label, description) VALUES (1,''' + sdescription + ''',''' + ldescription + ''' )';

它成功地将值插入到表中。
如何gid使用上述查询将整数值插入数据库。什么是正确的格式?

4

1 回答 1

6

gid成为 SQL 语句的一部分(因此出现错误:)Unknown column gid
您需要使用 Delphigid变量来构造 SQL 语句(就像使用sdescriptionand一样ldescription):

sSql := 'INSERT INTO emp(usergroup_id, label, description) VALUES (' + InttoStr(gid) + ', ''' + sdescription + ''',''' + ldescription + ''' )';

如果您使用过参数,您将不会有如此混乱的查询/代码(这也受到 SQL 注入等的影响),例如:

qry := TSQLQuery.Create(nil); // or what ever TQuery component you use in your framework
try
  qry.SQLConnection := SQLConnection1;
  qry.SQL.Text := 'INSERT INTO emp(usergroup_id, label, description) VALUES (:usergroup_id, :label, :description)';
  qry.Params.ParamByName('usergroup_id').Value := gid;
  qry.Params.ParamByName('label').Value := sdescription;
  qry.Params.ParamByName('description').Value := ldescription;
  qry.ExecSQL;
finally
  qry.Free;
end;
于 2013-10-07T09:23:32.193 回答