0

我有一个查询,它只是一个简单的 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() )

如何使用参数并避免这个问题?

4

0 回答 0