MySQL UDF - mit libmySQL.dll (kein ODBC)

  • Du kannst nicht direkt auf die Datenbank zugreifen, nur vom Webserver aus, das heißt nur über PHP oder andere CGI-module und dafür brauchst du dann meine UDF nicht.

  • ???
    Die MySQL-UDF ist für einen direkten Zugriff auf einen MySQL-Server geschrieben.
    Dafür muss der Zugriff auf den Server auch möglich sein, aber viele Internethoster verbieten das für alle bis auf deinen Webserver.

    Zum Zugriff auf einen Webserver verwendest du z.B. _InetGetSource und HTTP. Das auslesen der Datenbank findet dann auf dem Server in einem PHP-Skript statt.

    *click* -> für fragen, wie du das machst, öffne einen neuen Thread.

  • Also für Administratoren finde ich diese Variante äußerst Sinnvoll da diese ja meist Vollzugriff auf das System haben.
    Kleine Tools erleichtern da schon eine Menge an Arbeit. Bin zwar kein Admin habe aber auch ständig mit Dateinbanken von uns und denen von Kunden zu tun.

  • Hallo,

    erstmal super MySQL-Klasse die du da für AutoIT auf Basis der LIB gebaut hast.
    Leider habe ich ein Problem.

    Ich versuche, wie in der Beispieldatei ein Array aufzubauen:

    Code
    $array = _MySQL_Fetch_Result_StringArray($res)
    _ArrayDisplay($array)

    Das geht ja auch. Aber wie greife ich nun auf einzelne Datenstätze zu?
    Im Normalfall müsste das doch mit

    Code
    $array[1]

    gehen? - Funktionier aber leider nicht. Statt dessen sagt er mir keine Fehlermeldung und
    das Programm stützt einfach ab.

    Würde mich über ein kleines Besispiel freuen.

    Zur Abfrage / Datenbank:
    Abfrage ist aktuell auf 20 Datenstätze limitiert
    Datenbank hat 7 Spalten.

    Lg

    tooliload

  • Hallo,

    hat sich soeben erledigt ... auf einmal funzt es.
    Vermute das mein PC gesponnen hat. - Was ein Reboot alles bewirkt.

    Lg

    tooliload

  • Wenn ich die test.au3 so compiliere wie sie ist unter Vista Home Premium Servicepack 2, bekomme ich die Windowsmeldung:
    test.exe funktioniert nicht mehr
    mit den Problemdetails: (gekürzt)
    Problemereignisname: APPCRASH
    Anwendungsname: test.exe
    Anwendungsversion: 3.3.4.0
    Anwendungszeitstempel: 4b509352
    Fehlermodulname: libmysql.dll
    Fehlermodulversion: 0.0.0.0

    Lösung des Problems original stand:

    [autoit]

    $connected = _MySQL_Real_Connect($MysqlConn, "localhost", "root", "", "cdcol")

    [/autoit]


    habe ich einfach "localhost" in "127.0.0.1" geändert und es funktioniert.

  • Dann funktioniert wohl die Namensauflösung von localhost in eine IP nicht. Das müsste aber an Vista liegen und nicht and AutoIt bzw. der MySQ-UDF ;)

  • Die Namensauflössung funktioniert tadellos, was localhost und die ip 127.0.0.1 angeht.
    Auf den MySQL-Server kan ich mit der IP: 127.0.0.1 oder localhost zugreifen.

  • Wenn ich jetzt über das Internet auf eine MySQL-DB zugreifen will, wie geh ich denn da vor?

    Also ich würde die IP erst per

    [autoit]

    _MySQL_Ping

    [/autoit]

    anpingen, ob der server grad erreichbar ist, aber ich versteh nichtmal, wie ich den Pointer setze (weil der nirgends deklariert wird oO)

    Selbst wenn ich das Testscript starte, bekomme ich hier immer ein error (

    [autoit]

    _MySQL_InitLibrary

    [/autoit]

    ), obwohl alles in einem verzeichnis liegt. Hier gehts doch rein um die DLL, oder?


  • _MySQL_InitLibrary lädt die DLL. Dann muss eine Initialisierungsfunktion aufgerufen werden, dmit die DLL verwendet werden kann. Welchen Fehler bekommst du denn von der Funktion?
    Btw: Die DLL ist nur in 32bit verfügbar, das Skript muss also mit AutoIt im 32bit-Modus ausgeführt werden, falls dein Windows 64bit ist.

    _MySQL_Ping testet nur, ob die MySQL-Verbindung noch läuft, die mit _MySQL_Real_Connect aufgebaut wurde.

  • hallo zusammen,

    habe mir gerade die mysql udf angesehen, weil ich eine lösung suche daten in eine DB automatisiert zu schreiben bzw. wenn vorhanden updaten ...
    zum testen habe ich die DB cdcol von xampp benutzt!

    zugriff, daten lesen funktioniert ...

    folgende sind ja enthalten:

    "Beauty","Ryuichi Sakamoto","1990","1"
    "Goodbye Country (Hello Nightclub)","Groove Armada","2001","4"
    "Glee","Bran Van 3000","1997","5"

    folgende möchte ich aus eine txt.hinzufügen (das einlesen der datei in ein array ist kein problem)

    (namen nur als beispiel, stehen aber so formatiert in einer täglichen datei)
    ---------------------------------------
    Horsti;Horst Köhler;1977;1
    Angie;Angela Merke;1978;1
    ---------------------------------------

    wie bekomme ich es jetzt hin, die daten einzufügen bzw. wenn vorhanden ein update auf diese zu machen?
    also ein Insert bzw. Update

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.8.1 (beta)
    Author: Prog@ndy

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

    Script Function:
    MySQL-Plugin Demo Script

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

    #ce ----------------------------------------------------------------------------

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

    #include <array.au3>
    #include "mysql.au3"

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

    ; db verbindungsvariablen
    $adress = "127.0.0.1"
    $user = "root"
    $pass = ""
    $dbname = "cdcol"

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

    ; MYSQL starten, DLL im PATH (enthält auch @ScriptDir), sont Pfad zur DLL angeben. DLL muss libmysql.dll heißen.
    _MySQL_InitLibrary()
    If @error Then Exit MsgBox(0, '', "")
    ;MsgBox(0, "DLL Version:",_MySQL_Get_Client_Version() & @CRLF & _MySQL_Get_Client_Info())

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

    $MysqlConn = _MySQL_Init()

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

    ; verbinden mit XAMPP cdcol
    $connected = _MySQL_Real_Connect($MysqlConn, $adress, $user, $pass, $dbname)
    If $connected = 0 Then Exit MsgBox(16, 'Connection Error', _MySQL_Error($MysqlConn))

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

    $query = "SELECT * FROM cds"
    _MySQL_Real_Query($MysqlConn, $query)

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

    $res = _MySQL_Store_Result($MysqlConn)
    $fields = _MySQL_Num_Fields($res)
    $rows = _MySQL_Num_Rows($res)
    ;MsgBox(0, "", $rows & "-" & $fields)

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

    $row1 = _MySQL_Fetch_Row_StringArray($res)
    _ArrayDisplay($row1)
    ; Zugriff
    MsgBox(0, '', "Zugriff Methode 2 - Reihe für Reihe")
    _MySQL_Data_Seek($res, 0) ; nur zum Zurücksetzen an den Anfang der Abfrage
    Do
    $row1 = _MySQL_Fetch_Row_StringArray($res)
    If @error Then ExitLoop
    _ArrayDisplay($row1)
    Until @error

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

    ; Abfrage freigeben
    _MySQL_Free_Result($res)

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

    ; Verbindung beenden
    _MySQL_Close($MysqlConn)
    ; MYSQL beenden
    _MySQL_EndLibrary()

    [/autoit]

    danke

    gruß gmmg

  • Das hat jetzt nicht direkt mit der UDF was zu tin, sondern mit SQL ;)
    Du musst die Daten einlesen, mit _MySQL_Real_Escape_String Datenbank sicher machen und dann eine Querystring zusammenbauen. Diesen führst du dann mit _MySQL_Real_Query aus.
    Am einfachsten machst du einen REPLACE-Befehl und nimmst z.B. den Benutzernamen als einzigartigen Schlüssel (UNIQUE KEY, das muss beim erstellen der Tabelle angegeben werden).
    Weiter MySQL-Grundalgen findest du hier:
    http://openbook.galileocomputing.de/dreamweaver8/24_kap24_001.htm
    http://dev.mysql.com/doc/refman/5.1/de/replace.html
    http://dev.mysql.com/doc/refman/5.1…-duplicate.html
    Edit: Wenn du dazu mehr Hilfe brauchst, ist eventuell ein neuer Thread besser geeignet.

  • hi progandy,

    danke für die info! werde es mal probieren ...

    werde einen neuen Thread dazu aufmachen!

    ein paar beispiele wären da hilfreich!

    gruß gmmg

    2 Mal editiert, zuletzt von gmmg (14. Februar 2010 um 14:23)

  • Huhu ich wollte mal dein UDF testen, weil ich in meinem Programm die nur Leuten aus meinem Forum gewähren möchte...
    also wollte ich mal ein wenig damit rumspielen...
    aber ich bekomm die DLL grad nciht geöffnet... bekomm immer -1 zurück...
    hat einer ne ahnung was los sein könnte?
    hab grad Autoit auf aktuellste version geupdatet
    hab win 7 64 bit...

  • ach problem gefunden... ich habs immer versucht mit F5 zu starten und somit zu simulieren... aber damit hat er probleme... ka warum... wenn cih es kompiliere macht er es ...

  • ach problem gefunden... ich habs immer versucht mit F5 zu starten und somit zu simulieren... aber damit hat er probleme... ka warum... wenn cih es kompiliere macht er es ...


    Die DLL, die bei der UDF dabei ist ist in 32bt. Du musst also als 32bit (x86) starten bzw. kompilieren. Ansonsten müsstest du dir eine 64bit-libmysql.dll suchen.

  • Hallo,

    kann es sein das die MySQl UDF .zip defekt ist? Zwei Dateien lassen sich nicht entpacken.

  • Hallo,

    kann es sein das die MySQl UDF .zip defekt ist? Zwei Dateien lassen sich nicht entpacken.


    Das muss ein Übertragungsfehler beim Serverwechsel gewesen sein. Ich habs neu hochgeladen.