使用 FireDAC 将数据插入 pgsql 后,数据信息发生了变化
After insert data into pgsql With FireDAC, the data info changed
开发工具:Delphi 10.1 Berlin
在 Delphi 中使用 FireDAC:插入 ttb(x) VALUES(aaa=111&bbb=222&ccc=333);
插入前:
aaa=111&bbb=222&ccc=333
但是用FireDAC插入后,字符串变为:
aaa=111=222=333
也就是说,在使用FireDAC时删除了字符“&bbb”和“&ccc”。
能告诉我怎么解决吗,谢谢!
最好养成在查询中始终使用参数的习惯
(Online documentation),
因为它可以让您避免此类问题。
在您的情况下,代码应如下所示:
FDQuery1.SQL.Text:='insert into ttb (x) values(:TestData)';
FDQuery1.Params.ParamByName('TestData').AsString:='aaa=111&bbb=222&ccc=333';
FDQuery1.ExecSQL;
除了文档中提到的好处之外,如果不使用参数,您还可以避免 SQL 注入和各种其他 "nasty" 可能发生在数据库中的事情。
此外,对于更新和插入,使用 FDConnection 组件本身会更简洁。
示例:
FDConnection.ExecSQL(
'insert into ttb (x) values(:TestData)',
['aaa=111&bbb=222&ccc=333'],
[ftString]);
无需额外查询。干净简单!
开发工具:Delphi 10.1 Berlin
在 Delphi 中使用 FireDAC:插入 ttb(x) VALUES(aaa=111&bbb=222&ccc=333);
插入前: aaa=111&bbb=222&ccc=333
但是用FireDAC插入后,字符串变为: aaa=111=222=333
也就是说,在使用FireDAC时删除了字符“&bbb”和“&ccc”。
能告诉我怎么解决吗,谢谢!
最好养成在查询中始终使用参数的习惯 (Online documentation), 因为它可以让您避免此类问题。 在您的情况下,代码应如下所示:
FDQuery1.SQL.Text:='insert into ttb (x) values(:TestData)';
FDQuery1.Params.ParamByName('TestData').AsString:='aaa=111&bbb=222&ccc=333';
FDQuery1.ExecSQL;
除了文档中提到的好处之外,如果不使用参数,您还可以避免 SQL 注入和各种其他 "nasty" 可能发生在数据库中的事情。
此外,对于更新和插入,使用 FDConnection 组件本身会更简洁。
示例:
FDConnection.ExecSQL(
'insert into ttb (x) values(:TestData)',
['aaa=111&bbb=222&ccc=333'],
[ftString]);
无需额外查询。干净简单!