Delphi SQL插入语句错误

0 sql delphi

qryreg.SQL.Add('Insert into RegistreerTB');
qryreg.SQL.add('Name , Surname, E-mail, Password)');
qryreg.SQL.Add('Values ('+quotedstr(edtname.Text)+','+quotedstr(edtsname.Text)+','+quotedstr(edtemail.Text)+','+quotedstr(edtpassuse.Text)+')');
qryreg.ExecSQL ;
qryreg.SQL.Text := 'Select * from RegistreerTB';
qryreg.Open ;
Run Code Online (Sandbox Code Playgroud)

这是使用atm与delphi的代码我试图从编辑框将数据保存到我的数据库.我得到的错误是EOELeException"插入语句"

ty提前

Ger*_*oll 8

正如oodesigner所说,更好的方法是使用参数.我不知道你正在看什么教科书,但给出的代码并不是最好的做法(这也不是最差的做法,至少它使用QuotedStr而不是'''' + edtname.Text + ''''第一次使用像O'Connell这样的东西时失败了,并允许SQL注入攻击.

根据Rob的answe使用参数并假设SQL Server语法,并假设TADOQuery(基于EOLEException)代码将类似于:

qryreg.SQL.Add('Insert into RegistreerTB');  
qryreg.SQL.Add('(Name , Surname, [E-mail], Password)');  //SQL Server syntax with square brackets

// OR qryreg.SQL.Add('(Name , Surname, "E-mail", Password)');  //Oracle/Postgres syntax with double quotes
// OR qryreg.SQL.Add('(Name , Surname, `E-mail`, Password)');  //MySQL syntax with grave accent

qryreg.SQL.Add('Values :Name, :Surname, :Email, :Password)'); 

qryreg.Parameters.ParamByName('Name').Value := edtName.Text;
qryreg.Parameters.ParamByName('Surname').Value := edtSName.Text;
qryreg.Parameters.ParamByName('Email').Value := edtEmail.Text;
qryreg.Parameters.ParamByName('Password').Value := edtPassUse.Text;

qryreg.ExecSQL;  
qryreg.SQL.Text := 'Select * from RegistreerTB';  
qryreg.Open ;  
Run Code Online (Sandbox Code Playgroud)