相当于php的mysql_real_escape_string

时间:2011-12-16 13:55:08

标签: delphi escaping dynamic-sql

我需要一些动态SQL来将大量值插入到数据库中。

INSERT INTO table1 (a,b,c,d) VALUES (1,2,3,'string with possible quotes'),....

因为我想每批插入大约1,000行,所以参数实际上不是一个选项 在php中,我使用mysql_ lib和mysql_real_escape_string来防止错误和SQL注入。

如何在Delphi中转义字符串值?

1 个答案:

答案 0 :(得分:11)

前段时间我在关于mysql_real_escape_string函数的MySql文档之后编写了一个delphi等效函数。

  

from中的字符串被编码为转义的SQL字符串   帐户连接的当前字符集。结果是   放入,并附加一个终止空字节。人物   编码为“\”,“'”,“”“,NUL(ASCII 0),”\ n“,”\ r“和Control + Z.   严格来说,MySQL只需要反斜杠和引号   用于引用查询中字符串的字符将被转义。   mysql_real_escape_string()引用其他字符来制作它们   更容易在日志文件中阅读

显然,此处忽略了..taking into account the current character set of the connection部分。

function StringReplaceExt(const S : string; OldPattern, NewPattern:  array of string; Flags: TReplaceFlags):string;
var
 i : integer;
begin
   Assert(Length(OldPattern)=(Length(NewPattern)));
   Result:=S;
   for  i:= Low(OldPattern) to High(OldPattern) do
    Result:=StringReplace(Result,OldPattern[i], NewPattern[i], Flags);
end;

function mysql_real_escape_string(const unescaped_string : string ) : string;
begin
  Result:=StringReplaceExt(unescaped_string,
    ['\', #39, #34, #0, #10, #13, #26], ['\\','\'#39,'\'#34,'\0','\n','\r','\Z'] ,
    [rfReplaceAll]
  );
end;