Speichern SQL-Statement in MEMO-Feld

  • Hallo zusammen,

    ich möchte SQL-Statements - neben anderen Daten - in einer Tabelle in einer SQL-DB speichern.


    Dazu baue ich mir einen Insert-Befehl in der Variablen "$sQuery".



    Grundsätzlich klappt der INSERT auch.


    Aber beim SQL-Befehl - der gespeichert werden soll - leider nicht.

    Variable "$sQuery"

    Wie kann ich Variable "$sQuery" so kapseln, daß der SQL-EXEC dies nur als Daten betrachtet und nicht als Befehl?


    Hat jemand einen Tipp?


    Danke Harro

  • Hab ich mal für Dich gemacht.

    Danke, verstanden. Werde mich bessern.


    Bin ein Stück weiter. Habe die einfachen Hochkommas gegen doppelte getauscht.

    Damit ist der String erst mal formal ok.

    Code
    $sQueryCh    = str_replace("'",'"',$sQuery);

    Schon gibt es die nächste Herausforderung:


    Ich möchte den String in einem MEMO-Feld speichern.

    Dazu muß das Feld über eine Bind-Variable "angeliefert" werden.

    Wie mache ich das?


    In den mir bekannten Programmiersprachen geht das so:

    Code
    sQuery = "Select * from meineTabelle where Irgendwas = '123' "
    mySQL = "INSERT INTO KIS_Protocol ( SQL_Befehl ) VALUES ( ?sQuery )"
    retcd = SQLEXEC(gnConnHandleKnG, mySQL)


    wenn ich das analog in PHP versuche, klappt das mit der Variablen "?sQuery" nicht.


    Code
    $sQuery = "Select * from meineTabelle where Irgendwas = '123' ";
    $sQuery = str_replace("'",'"',$sQuery);
    $sInsertBef = "INSERT INTO KIS_Protocol ( SQL_Befehl ) VALUES ( ?$sQuery )";
    $sInsertAbfrage = odbc_exec($gupta_connect, $sInsertBef);
    
    Wenn ich das ausführe, steht in dieser Variablen "$sInsertBef ":
    INSERT INTO KIS_Protocol ( SQL_Befehl ) VALUES ( ? Select * from meineTabelle where Irgendwas = "123"  );
    
    Die Variable wurde aufgelöst.

    Wie erreiche ich, daß die Variable nicht aufgelöst wird ??


    Hoffe, ich konnte mich verständlich ausdrücken.

    Gruß Harro

  • Du suchst prepared statements

    Hallo SniperSister,

    hab mit dem Prepared Statement getestet.


    Der odbc_Prepare und odbc_Execute sind formal ok.


    Wenn ich das Fragezeichen im Statement drin habe, bekomme ich die Meldung:

    "<[Microsoft][ODBC Driver Manager] Der Treiber unterstützt diese Funktion nicht" (komischerweise in Deutsch)


    Wenn ich das Fragezeichen im Statement durch zwei Hochkommas ersetze, laufen die Befehle technisch, der Insert funktioniert.


    Irgendwie seltsam.


  • "<[Microsoft][ODBC Driver Manager] Der Treiber unterstützt diese Funktion nicht" (komischerweise in Deutsch)


    Die Meldung in Deutsch deutet darauf hin, daß der Fehler NICHT vom SQLBase ODBC-Treiber erzeugt wird.

    Alle ODBC-Fehler von SQLBase sind in Englisch.


    Die Meldung kommt scheinbar vom "<[Microsoft][ODBC Driver Manager]"


    Mit einer anderen Programmiersprache (Visual FoxPro) auf diesem Rechner, funktioniert der Insert mit "?".


    Könnte das Problem an meiner Joomla-Version (3.5.1) liegen?


    Gruß Harro

  • Der Admin hat mir versprochen erneut den Upgrade zu versuchen.


    Konnte das Problem nun endlich lösen.

    Nach einer Stunde Spaziergang und von vorne anfangen.

    Eigentlich bin ich mir nahezu sicher, daß ich genau DAS am Anfang auch versucht habe.


    Egal, nun kann das nächste Problem kommen.


  • Ich hoffe sehr dass du die values vorher escapest, sonst hast du dir da gerade eine sql Injection Lücke gebaut - prepared statements verhindern genau das und sind daher die schönere Lösung

    Weiß nicht was das ist "value escapen".

    Kannst Du mir das sagen?


    Ein "prepared Statement" habe ich leider nicht ans Laufen bekommen.

    Hab jetzt 1 1/2 Tage trial & error an diesem Statement gemacht.

  • Hi,

    Habe eben mal nach "escapen" gesucht aber nichts (für mich) verständliches gefunden.

    Mir ist auch das Problem nicht klar und auch nicht was man genau escapen muß.

    Hast Du evtl einen Link wo man darüber mehr erfahren kann?


    Die Single-Quotes hatte ich bereits ersetzt. Ist es das was Du meinst?

    Ich mußte das machen, weil ich sonst die SELECT-Statements nicht speichern konnte.

    Code
    $sQueryCh = str_replace("'",'"',$sQuery);

    Gruß Harro

  • Habe eben mal nach "escapen" gesucht aber nichts (für mich) verständliches gefunden.

    Mir ist auch das Problem nicht klar und auch nicht was man genau escapen muß.

    https://www.klamm.de/forum/f28…ichtig-escapen-57790.html

    https://www.php-einfach.de/exp…ite-scripting-xss-in-php/