sql >> データベース >  >> Database Tools >> MySQL Workbench

SQLクエリはWorkbenchで機能しますが、Delphiでまったく同じクエリで「バリアント型を変換できませんでした」というエラーが発生します

    ここでSirRufoのコメントに同意します。 「どうすればいいですか?」に対する正解。 「それをしないでください。それは間違った方法です。」

    このようにクエリに直接値を貼り付けると、ハッカーはクエリに、次のように解釈されるものを配置する方法を見つけることができます。 SQLコマンド。 これはSQLインジェクションとして知られています 、そしてそれは過去数十年で数十億ドル相当の損害の原因となっています。 (誇張ではありません。)

    これを行う正しい方法は、パラメータを使用して、SQLコードをデータから明確に分離することです。 そのように:

    ADOQuery1.SQL.Clear;
    
    //: before an identifier specifies a parameter
    ADOQuery1.SQL.Add('SELECT tbl.emailAddress, tbljob.Time FROM '+
      'dbwindowwash.tblclient, dbwindowwash.tbljob, dbwindowash.tbljobclientworker '+
      'WHERE tbljobclientworker.jobID = tbljob.jobID AND '+
      'tbljobclientworker.clientID = tblclient.clientID AND tbljob.Date = :date';
    
    //parse the query and find parameter declarations
    ADOQuery1.Prepare;
    
    //set a value for the parameter
    ADOQuery1.ParamByName['date'].AsDateTime := TodaysDate;
    
    ADOQuery1.Open
    

    パラメータの値を設定する方法の正確な構文は、データセットタイプごとに異なる場合がありますが、基本的な考え方がわかります。



    1. SSMSおよびsp_OAMethod:VARCHAR(8000)より大きいデータ型はありますか?

    2. TSQLクエリは、過去24時間の1時間ごとの値を返します

    3. PHPMyAdmin 4.0.5-グリッド編集、チェックボックス、編集、コピー、削除機能は利用できません

    4. phpmyadminからデータをエクスポートしている間、SQLクエリページに戻ります