带有变量的SQL查询

时间:2012-08-06 18:15:54

标签: delphi delphi-7

嘿伙计们,我需要这方面的帮助......我正在为学校做PAT,我正在做以下怎样才能纠正它......我想发送一个输入的电子邮件地址名称 ID 号码出生日期性别城镇,所有字符串我的陈述是

Adoquery1.sql.text := 'insert into besprekings 
                       values('email', 'name', 'Id', 'birth', 'gender', 'town')'; 

字段如下:

 Email(string), Name(string), ID(string), Birth(string), Gender(string), town(string) 

这不是真正的功课,这是一个占我年纪数25%的项目。我已经完成了一切,但无法做到这一点。我们必须带来一些我们在学校里没有学到的新东西,对我来说,打开像邮件(Windows 8)这样的程序,这样做真的让每个人都想帮助

1 个答案:

答案 0 :(得分:9)

您需要使用参数化查询,以防止SQL注入。即使现在你的应用程序可能不需要担心,但最好养成一开始就做好的习惯。我将展示一些代码,你可以弄清楚如何自己完成它。

首先,正确填充您的SQL。指定要插入的列的名称,以及用于填充它们的参数名称(以:开头的部分):

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('INSERT INTO beskprekings (email, name, Id)');
ADOQuery1.SQL.Add('VALUES (:email, :name, :Id)');

现在使用您在VALUES列表中使用的相同名称将实际值插入参数中:

ADOQuery1.Parameters.ParamByName('email').Value := email;
ADOQuery1.Parameters.ParamByName('name').Value := name;
ADOQuery1.Parameters.ParamByName('id').Value := Id;

现在,执行查询。

使用参数化查询执行此操作的额外好处是,一旦运行一次,您可以简单地重新填充参数并再次运行它;数据库已经完成了prepare查询所需的内容(提示:我标记的单词对ADO和其他数据库有意义 - 你应该调查它),这样当你再次使用它时它会快得多试。