Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на параметри с ADO Query (mysql/MyConnector)

Бих опитал да добавя SQL.BeginUpdate/SQL.EndUpdate около Adds, в противен случай SQL текстът ще бъде анализиран всеки път, когато извикате „Add“.

Като цяло това е добра идея, тъй като ADOQuery.SQL е TStringList, който има събитие OnChange, което задава CommandText. След това текстът SetCommandText в крайна сметка извиква TADOCommand.AssignCommandText, който върши доста работа, анализирайки параметри и задавайки CommandObject.CommandText. Понякога драйверите ще се провалят с частични SQL изрази, но това изглежда добре.

Имах подобен проблем преди много години - затова научих за тези неща!

procedure TForm1.login();
var
  Qry : TADOQuery;
begin
  Qry := CreateSQL;
  try
    Qry.SQL.BeginUpdate;

    Qry.SQL.Add('SELECT');
    Qry.SQL.Add('  *');
    Qry.SQL.Add('FROM');
    Qry.SQL.Add('  LisenswebUsers');
    Qry.SQL.Add('WHERE UserName = :MyUsername '); // debugger exception here
    Qry.SQL.Add('  AND UserPassword = :MyPassword '); // debugger exception here

    Qry.SQL.EndUpdate;
    Qry.Parameters.ParamByName('MyUsername').value := txtLogin.text;
    Qry.Parameters.ParamByName('MyPassword').value := strmd5(txtPassword.text);
    Qry.Open;

    if Qry.Recordcount <> 1 then
    begin
      lblLoggedinAs.Text := format('Du er logget inn som: %s (%s)',[FieldByName('Username').AsString,FieldByName('UserEmailaddress').AsString]);
      MainPageControl.ActivePageIndex := 1;
    end
    else
    begin
      txtPassword.Text := '';
      txtPassword.SetFocus;
    end;
  finally
    Qry.Free;
  end;
end;

Между другото, вложеното with са наистина грозни (нека свещената война започне)

Понякога ще използвам with , но никога не би вложил три нива! Ако сте, поне намалете обхвата на с SQL, така че да завършва преди с параметри.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:#1075 - Неправилна дефиниция на таблица; автоматично инкремент спрямо друг ключ?

  2. MySQL топ 2 записа на група

  3. Как да получите COUNT заявка в django

  4. Как да съхраня картина в MySQL?

  5. GET параметрите са уязвими към SQL инжекция - PHP