我需要一些动态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中转义字符串值?
答案 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;