sql >> Database >  >> Database Tools >> MySQL Workbench

SQL-query werkt in Workbench, maar krijgt de fout 'Kan varianttype niet converteren' met exact dezelfde query in Delphi

Ik ben het eens met de opmerking van SirRufo hier. Het juiste antwoord op "hoe doe ik dit?" is "doe dat niet; dat is de verkeerde manier om het te doen."

Als u op die manier waarden rechtstreeks in de zoekopdracht plakt, kunnen hackers een manier vinden om dingen in uw zoekopdracht te plaatsen die worden geïnterpreteerd als SQL-opdrachten. Dit staat bekend als SQL-injectie , en het is de afgelopen decennia verantwoordelijk geweest voor miljarden dollars aan schade. (Niet overdreven.)

De juiste manier om dit te doen is door uw SQL-code netjes te scheiden van uw gegevens, met behulp van parameters, zoals zo:

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

De exacte syntaxis voor het instellen van de waarde van een parameter kan verschillen van het ene datasettype tot het andere, maar dat zou u het basisidee moeten geven.



  1. Selecteer ingelogde gebruikers-ID met PDO

  2. SQL-query om prefix voor bestaande waarde in een veld te plaatsen

  3. Ik heb geüpdatet naar MariaDB 10.2.20 om CTE te gebruiken. Krijg nog steeds een niet-herkend instructietype. (in de buurt van WITH) in phpMyAdmin

  4. Hoe de waarden van een tabelvariabele te zien tijdens het debuggen in T-SQL?