0

MySQL への単純な INSERT であるクエリがあります。値をクエリに追加するために使用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