MySQLdac - Probleme mit nem SQL



  • Hallo,

    ich lese mit meiner C++ Anwendung eine Datei ein, werte die Aus und schreibe Informationen in eine MySQL Datenbank:

    String sql = "INSERT INTO products (titel, sprache)VALUES ('"+dbtitel+"', '"+dbsprache+"');";
    
    try
       {
          Form1->SQLQuery->Close();
          Form1->SQLQuery->SQL->Clear();
          Form1->SQLQuery->SQL->Add(sql);
          Form1->SQLQuery->ExecSQL();
          return true;
       }
       catch(...)
       {
          //Form1->Memo1->Clear();
          //Form1->Memo1->Lines->Add(sql);
          return false;
       }
    

    Ein SQL Der Probleme macht sieht so aus:

    INSERT INTO products (titel, sprache)VALUES ('" I'm Sorry I Haven't a Clue', 'eng');
    

    Problem ist klar, es liegt an dem '. Sicherlich werden andere Sonderzeichen auch noch Probleme machen. Gibst ne möglichkeit, all diese Zeichen Problemlos in die Datenbank zu schreiben?
    Kann ein PHP Script diese Zeichen später ohne Probleme auch wieder lesen?

    Dirk



  • INSERT INTO products (titel, sprache)VALUES ('" I\'m Sorry I Haven\'t a Clue', 'eng');
    


  • Du könntest parametrisierte Statements verwenden, z.B.:

    String sql = "INSERT INTO products (titel, sprache)VALUES (':dbtitel', ':dbsprache');";
    
    try
       {
          Form1->SQLQuery->Close();
          Form1->SQLQuery->SQL->Clear();
          Form1->SQLQuery->SQL->Add(sql);
          Form1->SQLQuery->Prepare();
          Form1->SQLQuery->ParamByName("dbtitel")->AsString = dbtitel;
          Form1->SQLQuery->ParamByName("dbsprache")->AsString = dbsprache;
          Form1->SQLQuery->ExecSQL();
          return true;
       }
       catch(...)
       {
          //Form1->Memo1->Clear();
          //Form1->Memo1->Lines->Add(sql);
          return false;
       }
    

    Die andere Möglichkeit ist, sich selbst darum zu kümmern. Hilfreich könnte dabei die Methode QuotedStr() sein.
    Was PHP damit anstellt, weiß ich aber nicht.

    Gruß,

    Alexander



  • Hi,

    ich habe dies hier probiert:

    sql= StringReplace(sql, "'", "\'", TReplaceFlags() << rfReplaceAll);

    Aber das funktioniert auch nicht. Irgendwie muss es aber gehen, jemand eine Idee?

    Dirk



  • Wenn schon StringReplace() dann

    sql= StringReplace(sql, "'", "''", TReplaceFlags() << rfReplaceAll); // Verdopplung der Hochkommas
    

    Gruß,

    Alexander


Anmelden zum Antworten