Mysql Insert + Update Data

  • wie kann ich eine leerzeile in einer txt am ende der einträge entfernen?


    Ich versteh nicht, was du damit meinst. Das hat jetzt aber nichts mehr mit MySQL zu tun oder?

  • nein, hat nichts mit mysql zu tun nur mit dem verarbeiten einer txt in mysql ...

    habe es aber jetzt so gemacht, das ich die letzte zeile einfach beim schleifendurchlauf weglasse!

    also:

    [autoit]

    For $x = 2 to $aRecords[0] -1

    [/autoit]

    gruß gmmg

  • Oder du machst als erste Zeile in deine Schleife so was:

    [autoit]

    For $x = 1 to $aRecords[0]
    If Not StringStripWS($aRecords[$x], 3) Then ContinueLoop ; Zeilen, die nichts oder nur leerzeichen enthalten überspringen
    ; weiterer Code
    Next

    [/autoit]
  • hallo progandy,

    danke für die info! :)

    die letzte zeile der textdatei ist nicht leer, sondern enthält ein zeichen (kleines viereck)! denke mal es ist irgendein steuerzeichen ...

    [autoit]


    20100310;"TRAFFIC";"TRAF";;10445;"4513787";2;;0;20100407;"BiV";"DÜXXH";"";;

    [/autoit][autoit][/autoit][autoit][/autoit]

    hab die txt mal angehangen!

    hab hier einen lösungsansatz gefunden

    Spoiler anzeigen

    nimm Dir einen Hex-Editor, ermittle den Zeichencode des kleinen Vierecks, lese die Datei in eine Zeichenkette ein, ermittle mit der Instr-Funktion die Position des kleinen Vierecks, verwende die Mid-Funktion, um die Zeichenkette hinter dem Viereck zu erhalten, speichere die Daten zurück und starte den Import.
    -->
    Das kleine Viereck ist ein Textumbruchzeichen <tt>Chr(10)</tt> oder <tt>Chr(13)</tt>


    gruß gmmg

  • Hallo Progandy :)

    hab ein kleines verständnisproblem!
    ich lese nach dem muster (siehe vorherige posts) eine textdatei in ein array!
    diesen splitte ich und stelle dann aus den einzelnen array werten eiinen string!

    quelltextabschnitt ..

    [autoit]


    For $x = 1 to $aRecords[0]
    ;MsgBox(0,"",$aRecords[$x])
    ; string formatieren ...

    [/autoit][autoit][/autoit][autoit]

    $s_Row_txt_t1 = StringSplit($aRecords[$x], ",") ; den Record in die einzelnen Felder teilen
    $s_Row_txt = '' ; Variable füe gesamten Text leeren
    ;~ For $i = 1 To $s_Row_txt_t1[0] ; für jedes Feld Befehle ausführen
    ;~ $s_Row_txt_t1[$i] = _MySQL_Real_Escape_String($MysqlConn, $s_Row_txt_t1[$i]) ; Feldinhalt MySQL-sicher machen
    ;~ $s_Row_txt &= "'" & $s_Row_txt_t1[$i] & "' ," ; an des Gesamttext ein Anführungszeichen , den gesicherten Text, ein Anführungszeichen und ein Komma anhängen
    ;~ ;MsgBox(0,"",$s_Row_txt)
    ;~ Next
    ;~ $s_Row_txt = StringTrimRight($s_Row_txt, 1) ; Das letzte Komma vom Gesamtstring entfernen

    [/autoit][autoit][/autoit][autoit]

    ; zusammengestellter string
    $z_string = ("'" & $s_Row_txt_t1[85] & "','" & $s_Row_txt_t1[86] & "','" & $s_Row_txt_t1[64] & "','" & $s_Row_txt_t1[87] & _
    "','" & $s_Row_txt_t1[88] & "','" & $s_Row_txt_t1[89] & "','" & $s_Row_txt_t1[90] & "','" & $s_Row_txt_t1[92] & _
    "','" & $s_Row_txt_t1[93] & "','" & $s_Row_txt_t1[99] & "','" & $s_Row_txt_t1[100] & "','" & $s_Row_txt_t1[101] & _
    "','" & $s_Row_txt_t1[102] & "','" & $s_Row_txt_t1[103] & "','" & $s_Row_txt_t1[105] & "'")

    [/autoit][autoit][/autoit][autoit]

    $z_string = StringReplace($z_string,'"', '')

    [/autoit][autoit][/autoit][autoit]

    ;ConsoleWrite($z_string)
    MsgBox(0,"",$z_string)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]


    ;formatierter string

    [/autoit][autoit][/autoit][autoit]

    '16.03.2010','10:15','1000','1','1','00:00:06','00:00:06','0','0','0','0','00:00:00','00:00:00','0','00:03:52'

    [/autoit][autoit][/autoit][autoit][/autoit]

    wie mache ich den string jetzt MySQL-sicher?
    geht folgendes?

    $z_string = _MySQL_Real_Escape_String($MysqlConn,$z_string)

    danke für eure antworten ...

    gruß gmmg :)

  • Du musst EscapeString für jeden einzelnen Eintrag aufrufen, also:

    [autoit]

    ("'" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[85]) & "','" & _MySQL_Real...

    [/autoit]
  • das ging ja schnell :)

    zum glück sind es nur 14 einträge!

    ich hätte gedacht, mann stellt sich den string zusammen und macht den danach myql sicher!
    kann man überhaupt testen, ob ein string mysql sicher ist?

    danke

    gruß gmmg

  • Den kompletten String auf einmal abzusichern geht leider nicht. Der String wird so gesichert, dass der komplette String in sich in der MySQL-Anweisung neutral verhält und damit den Wert von einem Feld darstellt. So wird z.B. das Anführungszeichen maskiert, sodass es den String nicht beendet und nachfolgende zeichenfolgen nicht als MySQL-Befehl gewertet werden. Wenn aber mehrere Felder befüllt werden sollen, muss jedes einzelne Feld für sich gesichert werden.

  • hab es jetzt so gemacht, passt aber nicht ... es kommt eine syntax fehlermeldung!

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    $z_string = ("'" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[85]) & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[86]) & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[64]) & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[87]) & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[88] & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[89] & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[90] & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[92] & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[93] & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[99] & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[100] & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[101] & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[102] & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[103] & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[105] & "'")

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    ERROR: syntax error
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[105] & "'")

    Einmal editiert, zuletzt von gmmg (17. März 2010 um 12:23)

  • einige klammerfehler beseitigt, funktioniert trotzdem noch nicht ...

    [autoit]


    $z_string = ("'" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[85]) & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[86]) & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[64]) & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[87]) & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[88]) & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[89]) & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[90]) & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[92]) & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[93]) & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[99]) & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[100]) & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[101]) & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[102]) & "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[103]) & _
    "','" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[105]) & "'")

    [/autoit][autoit][/autoit][autoit][/autoit]

    fehler:

    ERROR: _MySQL_RealEscapeString(): undefined function.
    $z_string = ("'" & _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[85])
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

    der abschnitt _MySQL_RealEscapeString($MysqlConn, $s_Row_txt_t1[85]) muss aber nicht in die query bei values

    die query funktioniert aber auch ohne das sichermachen, aber ist ja nicht so gut ...


    gruß gmmg

    Einmal editiert, zuletzt von gmmg (17. März 2010 um 12:43)

  • ICh kann die Funktionen nicht ganz auswendig und hab ein paar Unterstriche vergessen: _MySQL_Real_Escape_String

  • danke für deine hilfe!

    es funktioniert jetzt ...

    es lag an der "_MySQL_Real_Escape_String()" die war falsch geschrieben!
    mir ist es aber auch nicht aufgefallen ...

    kann man das auch direkt hier machen:

    [autoit]


    Local $sQuery = "UPDATE tab_vorgang SET `UMSATZEUR` = '" & $s_Row_txt_t1[2] & "',`STdatum` = '" & $s_Row_txt_t1[4] & _
    "' WHERE `xNr` = '" & $s_Row_txt_t1[1] & "'"

    [/autoit][autoit][/autoit][autoit]

    Local $sQuery = "UPDATE tab_vorgang SET `UMSATZEUR` = '" & _MySQL_Real_Escape_String($s_Row_txt_t1[2]) & _
    "',`STdatum` = '" & _MySQL_Real_Escape_String($s_Row_txt_t1[4]) & _
    "' WHERE `xNr` = '" & $s_Row_txt_t1[1] & "'"

    [/autoit][autoit][/autoit][autoit]

    ;-----

    [/autoit][autoit][/autoit][autoit][/autoit]


    geht das so auch wie im zweiten beispiel?

    gruß gmmg ;)

    4 Mal editiert, zuletzt von gmmg (19. März 2010 um 09:48)

  • hallo,

    kann man das so wie im zweiten beispiel machen?

    gruß gmmg

  • Wenn xNr eine Zahl ist, solltest du Number() verwenden und keine Anführungszeichen ;)

    [autoit]

    "WHERE `xNr` = " & Number($s_Row_txt_t1[1])

    [/autoit]
  • hallo progandy :)

    ok, mit Number!

    und komplett so oder?

    [autoit][/autoit][autoit][/autoit][autoit]

    Local $sQuery = "UPDATE tab_vorgang SET `UMSATZEUR` = '" & _MySQL_Real_Escape_String($s_Row_txt_t1[2]) & _
    "',`STdatum` = '" & _MySQL_Real_Escape_String($s_Row_txt_t1[4]) & _
    "' WHERE `xNr` = " & Number($s_Row_txt_t1[1])

    [/autoit]

    gruß gmmg

  • Ja. Je nachdem was UMSATZEUR ist, kannst du eventuell auch hier Number verwenden. Das kommst allerdings auf deine Daten an ;)

  • @ progandy

    bin gerade auf ein problem gestossen!
    wie kann ich einen fehler ausgeben,wenn es beim verarbeiten der _MySQL_Real_Query($MysqlConn, $sQuery) einen fehler gibt?

    z.b. feldtypen passen nicht u.a.

    danke im voraus

    gruß gmmg

  • danach musst du mit _MySQL_Error($MysqlConn) bzw. _MySQL_Errno($MysqlConn) den Fehler auslesen ;)

  • ich hab es jetzt mal so in das script eingebaut!

    scriptauschnitt -->

    _MySQL_Real_Query($MysqlConn, $sQuery)
    If @error <> 0 Then MsgBox(0,"",$x & " / " & $sQuery)

    hier liefert mir @error den wert 0 zurück, wenn alles ok ist

    das werde ich aber nochmal mit fehlerhaften werten prüfen ...

    gruß gmmg