我有一个查询,它只是一个简单的 INSERT 到 MySQL。当我使用DBQuery.Params
将我的值添加到查询时,我在 MySQL 端得到 ??????(或 E?? E?E???)(如果我执行 SELECT 我也会得到这个结果)。但是当我直接添加我的值来查询时,一切都很好。
有问题的方式:
procedure TfrmMain.Button1Click(Sender: TObject);
var
Title: widestring;
begin
Title:='سلام';
DBQuery.SQL.Text:=
'INSERT INTO tblintersection '+
'( '+
' Address, '+
' Title, '+
' InsertDate '+
') '+
'VALUES '+
'( '+
' :Address /*Address*/, '+
' :Title /*Title*/, '+
' NOW() /*InsertDate*/ '+
')';
DBQuery.Params.ParamValues['Address']:='100';
DBQuery.Params.ParamValues['Title']:=Title;
DBQuery.ExecSQL;
end;
如果我更改:Title
为"'+Title+'"
(并删除它的参数)问题将得到解决,但我想使用参数来避免注入等问题。
DB CharacterSet 是 Latin1。但是当我直接在查询中使用值时一切都很好
我也对此进行了测试,但没有结果:
DBQuery.ParamByName('Title').DataType:= ftWideString;
DBQuery.ParamByName('Title').Value:= Title;
我已经使用Zeos
ZSqlMonitor
并保存了日志显示:
2013-09-25 11:18:24 cat: Execute, proto: mysql-5, msg: INSERT INTO tblintersection ( Address, Title, InsertDate ) VALUES ( 'sd45' , '? ??? ??? ???' , NOW() )
如何使用参数并避免这个问题?